骨干使用原型来定义类

时间:2012-10-23 22:19:42

标签: javascript backbone.js

通过Backbones源代码我注意到类的定义如下:

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

为什么Model定义了两次我问自己,对模型的搜索显示模型的原型然后如此扩展:

_.extend(Model.prototype, Events, {

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

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

希望这会让我对原型继承的理解提升一个档次

3 个答案:

答案 0 :(得分:4)

这只是一个名为Model的局部变量的快捷方式,其类型比Backbone.Model短。 Javascript没有引用的概念,因此ModelBackbone.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方法与扩展函数原型完全相同。