Я действительно не получаю функцию ember.js 'reopenClass. Я думал, что он добавил дополнительный код к прототипу Object, поэтому все экземпляры этого объекта получат функциональность, которая была добавлена нестационарным способом. Однако это не делает. Похоже, что он только добавляет код, который можно статически выполнять. Например. У меня есть этот код:Ember.js как работает reopenClass?
Logger = Ember.Object.extend({
log: function(thing) {
console.log(thing + ' wassup');
}
});
var logger = Logger.create();
logger.log("1, yo")
logger.reopen({
log: function(name) {
console.log(name + 'ghurt')
}
});
logger.log("2, yo")
Logger.reopenClass({
log: function(name) {
console.log(name + 'fresh')
}
});
logger.log("3, yo")
Logger.log("4, yo")
Он выводит это:
1, yo wassup
2, yoghurt
3, yoghurt
4, yofresh
Что я ожидал, был такой:
1, yo wassup
2, yoghurt
3, yofresh
4, undefined (I think)
Так что мой вопрос: Что reopenClass делать и когда я могу использовать Это?
Ok, так Если я получу это r ight logger.reopen() только добавляет код в экземпляр журнала, Logger.reopen() добавляет код для каждого нового экземпляра, который будет создан (существующие экземпляры не будут изменены), а Logger.reopenClass() добавляет код, статический класс Logger (его нельзя вызывать из экземпляров, только статически). Верный? – koenpeters
Да, это правильно. – pangratz
Хорошо. Спасибо, что пролил свет. Мне было трудно понять это (как в: Я не понял) из документации по адресу http://emberjs.com/documentation/. – koenpeters