#javascript #backbone.js
#javascript #backbone.js
Вопрос:
Я очень новичок в Backbone.js , итак, есть backbone.js по сути, перенося структуру классов в javascript? Если да, то разве это не шаг назад? Прототипы Javascripts более мощные, согласно Дугласу Крокфорду.
Ответ №1:
Магистраль использует прототипы. В JavaScript нет «структур классов», несмотря на то, как выглядит Backbone.
Например:
Backbone.Model.prototype.sayFoo = function(){
alert("foo");
};
MyModel = Backbone.Model.extend({});
m = new MyModel();
m.sayFoo(); // => "foo" alert box
Я постоянно использую прототипы в Backbone, и создатель Backbone (Джереми Ашкенас) также часто использует их в Backbone.
То, что вы видите как «структуру классов», — это литерал объекта, используемый для определения методов объекта.
Это:
Backbone.Model.extend({
initialize: function(){
}
});
точно такой же код, как этот:
var myDef = {
initialize: function(){
}
};
Backbone.Model.extend(myDef);
Единственное отличие состоит в том, что во второй версии я объявил определение объекта как переменную вместо того, чтобы просто передавать его непосредственно в метод расширения модели.
Комментарии:
1. Но он использует слово «класс» в документации.
2. Документация не имеет большого значения. Вместо этого он мог бы использовать слово «foo», и это не изменило бы работу кода. Использование «класса», вероятно, предназначено для того, чтобы помочь людям понять, что происходит, не вдаваясь во все детали прототипного наследования. Это, и Джереми создал CoffeeScript, в котором есть ключевое слово «class», поэтому оно может быть перенесено из этого.