2

查看 Backbones 源代码,我注意到类的定义如下:

var Model = Backbone.Model = function(...

为什么 Model 定义了两次我问自己,对 Model 的搜索表明 Model 的原型随后被扩展如下:

_.extend(Model.prototype, Events, {

我做了一个小测试,似乎如果'Model.prototype'被扩展,更改会自动影响Backbone.Model,这背后的原因是什么,为什么不写成这样:

Backbone.Model = function(...
Backbone.Model.prototype.extend(...

希望这将使我对原型继承的理解更上一层楼

4

3 回答 3

4

这只是一个捷径,有一个名为的局部变量Model,它比Backbone.Model. Javascript没有引用的概念,因此两者都Model指向Backbone.Model完全相同的对象。

于 2012-10-23T22:24:03.773 回答
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.
于 2012-10-23T22:24:00.623 回答
0

因为 Backbone 的extend方法正是通过扩展函数原型来完成的。

于 2012-10-23T22:25:53.550 回答