Backbone.js со структурой классов вместо прототипов — это не шаг назад?

#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», поэтому оно может быть перенесено из этого.