Я новичок в JS и Backbone
Какая разница между этими двумя?
TestModel = new Backbone.Model({ title: "test title" })
TestModel = Backbone.Model.extend({ title: "test title" })
Я новичок в JS и Backbone
Какая разница между этими двумя?
TestModel = new Backbone.Model({ title: "test title" })
TestModel = Backbone.Model.extend({ title: "test title" })
Существует принципиальная разница, которая коротко может быть описана как "разница между проектом дома и самим домом".
Для опытных программистов я бы просто сказал, что "new Backbone.Model" возвращает экземпляр объекта, но "Backbone.Model.extend" возвращает функцию-конструктор
FIRST: новый объект (т.е. Дом)
var TestModel = new Backbone.Model({ title: "test title" });
вы создаете новый объект, структура которого (методы и переменные) были определены где-то в другом месте. Объект можно рассматривать как "все нелокальные элементы" языка, где для "родного элемента" я имею в виду базовые типы, такие как целые числа, символы и т.д.
В фигурных скобках {} вы передаете значение некоторой переменной или метода. Это называется, как ранее объяснил Томаш Нуркевич, конструктором, поскольку он позволяет вам "построить" новый объект, модель которого была описана в другом месте.
Чтобы дать вам известный пример: вы пишете
var myArray = new Array();
Это означает, что вы создаете новый массив, который является неродным объектом, который был определен в другом месте. вы также можете написать:
var myArray = new Array([1,2,3,4,5]);
И он заполняет массив заданными числами.
ВТОРОЙ: изменить определение существующего объекта (т.е. Проект дома)
с
var TestModel = Backbone.Model.extend({ title: "test title" })
вы говорите что-то очень простое для вашей виртуальной машины: "Объект, который вы мне даете по умолчанию, очень приятный, но я хочу реализовать больше функций/свойств". Таким образом, с условием "extend" вы изменяете определение объекта, добавляя или переопределяя существующий метод/свойства.
Пример: хороший пример в backbone.js задается функцией компаратора коллекции. Когда вы расширяете объект, определяющий его, "он будет использоваться для сохранения коллекции в отсортированном порядке".
Пример:
myCollection = Backbone.Collection.extend({
comparator:function(){
return item.get('name');
}
});
В ЦЕЛОМ
Что вы должны делать, когда "backboning" (разработка с использованием backbone.js framework) заключается в расширении данного объекта (например, View) с помощью:
window.ButtonView = Backbone.View.extend({
btnText:'nothingByDefault',
myNewMethod:function(){
//do whatever you want, maybe do something triggered by an event, for instance
}
});
а затем использовать его где-то еще в коде, один раз для каждой кнопки, которую вы хотите обработать, включая в фигурных скобках все значения, которые вы хотите передать объекту
[...]
var submitBtn = new ButtonView({btnText:"SubmitMe!"}),
var cancelBtn = new ButtonView({btnText:"Erase All!"});
....Надеюсь это поможет...
Во втором случае TestModel
является конструктором, который вы можете использовать несколько раз позже для создания экземпляра модели:
var model = new TestModel();
Однако прохождение title
для extend
имеет другое значение. Вероятно, вы должны использовать:
var TestModel = Backbone.Model.extend({defaults: { title: "test title" }});
или передать атрибуты модели при создании объекта:
var model = new TestModel({ title: "test title" });
В первом случае, с другой стороны, TestModel
уже является экземпляром модели (поэтому его следует называть testModel
чтобы следовать соглашению об именовании JavaScript):
var testModel = new Backbone.Model({ title: "test title" })