Tôi không thực sự có được chức năng reopenClass của ember.js. Tôi nghĩ rằng nó thêm mã thêm vào nguyên mẫu của Object, vì vậy tất cả các trường hợp của đối tượng đó sẽ nhận được các chức năng được thêm vào một cách không tĩnh. Nó không làm điều này tuy nhiên. Có vẻ như nó chỉ thêm mã có thể được thực thi tĩnh. Ví dụ. Tôi có mã này:Ember.js reopenClass hoạt động như thế nào?
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")
Nó ra này:
1, yo wassup
2, yoghurt
3, yoghurt
4, yofresh
gì tôi mong đợi là thế này:
1, yo wassup
2, yoghurt
3, yofresh
4, undefined (I think)
Vì vậy, câu hỏi của tôi là: không reopenClass làm gì và khi nào tôi sử dụng nó?
Ok, vì vậy Nếu tôi nhận được r này ight logger.reopen() chỉ thêm mã vào cá thể logger, Logger.reopen() thêm mã cho mỗi cá thể mới sẽ được tạo (các cá thể hiện tại sẽ không được thay đổi) và Logger.reopenClass() thêm mã tĩnh lớp Logger (nó không thể được gọi từ các cá thể, chỉ là tĩnh). Chính xác? – koenpeters
Đúng, đúng vậy. – pangratz
Ok. Cảm ơn vì đã đổ ánh sáng. Tôi đã có một thời gian khó hiểu điều này (như trong: Tôi đã không nhận được nó) từ tài liệu tại http://emberjs.com/documentation/. – koenpeters