通过Backbones源代码我注意到类的定义如下:
var Model = Backbone.Model = function(...
为什么Model定义了两次我问自己,对模型的搜索显示模型的原型然后如此扩展:
_.extend(Model.prototype, Events, {
我做了一点测试,似乎如果'Model.prototype'被扩展,那么更改会自动影响Backbone.Model,这背后的原因是什么,为什么它不是这样编写的:
Backbone.Model = function(...
Backbone.Model.prototype.extend(...
希望这会让我对原型继承的理解提升一个档次
答案 0 :(得分:4)
这只是一个名为Model
的局部变量的快捷方式,其类型比Backbone.Model
短。 Javascript没有引用的概念,因此Model
和Backbone.Model
都指向完全相同的对象。
答案 1 :(得分:1)
通过JavaScript引用传递对象。将对象分配给多个变量时,不要创建对象的副本。
var a = {};
var b = a;
a === b // both variables point to (reference) the same object
b.x = 5;
a.x === 5
// updates through one of the variables are thus automatically
// propagated to the other variables that reference the same object.
答案 2 :(得分:0)
因为Backbone的extend
方法与扩展函数原型完全相同。