Какая разница между ember.js расширяется и создается?
В чем разница между ember.js
Методами объекта extend
и create
?
TL;DR: вы найдете ответ в Руководствах Ember: классы и экземпляры.
Иногда я вижу это в примерах, а иногда и в другом. В частности, какая разница между Em.Application.extend({})
и Em.Application.create({})
?
Если я объявляю свое приложение таким образом, что это значит?
Ember.Application.create({
MyController : Ember.ArrayController.extend({
}),
});
Как я могу получить доступ к экземпляру MyController? Мне нужно каким-то образом создать его? Мне нужно вставить в него некоторые данные.
Ответы
Ответ 1
Покойный простой ответ заключается в том, что extend
определяет новый класс JS, который наследует от расширяемого вами класса, но не создает экземпляр этого класса. create
создает экземпляр класса.
Em.Application
- частный случай, потому что вы создаете пространство имен, а не экземпляр объекта. Я не знаю, когда вы захотите extend
Em.Application
.
App = Em.Application.create(); // I have a new Em.Application namespace
App.A = Em.Object.extend(); // I have defined a new class, App.A,
// which inherits from Em.Object
var a = App.A.create(); // a now contains an instance of App.A.
Я бы посоветовал вам читать "Соглашения об именах".
ETA: И Понимание объектов Ember, как это предложено в заплитном комментарии.
Ответ 2
Из того, что мало я понимаю, в условиях неспециалиста, вы расширяете, когда хотите определить идею нового объекта со свойствами, которые никогда не будут меняться (за исключением повторного открытия) и существуют во всех версиях этого объект.
Вы создаете, когда хотите работать с конкретным объектом (экземпляром). Другими словами, что-то со свойствами, которые будут изменены действиями или другими конкретными экземплярами.
Часто вам нужно создавать отношения между объектами, вам не нужно говорить об отдельных отдельных объектах, а скорее о идее объекта. Поэтому вам не нужно создавать каждый раз, когда вы расширяете.
Надеюсь, я правильно понимаю.