试图了解骨干继承和专业化

时间:2012-05-09 23:12:40

标签: javascript backbone.js

我有一个基本视图V

V = Backbone.View.extend({   
  initialize: function() {
    console.log(this.options.z);
    console.log(this.options.q);   
  }
});

扩展VV,设置属性的值(q: 234):

VV = V.extend({q:234});

V进一步专注于VV

new VV({z: 123})

问题是基类型无法访问q,我该怎么做? 在这个例子中,我试图理解这个继承系统 qz类似于要定义的虚拟/抽象值 子类。

http://jsfiddle.net/maxl/G8cab/

1 个答案:

答案 0 :(得分:0)

当你这样说时:

VV = V.extend({q: 234});

您正在创建VV作为"子类"具有额外V属性的q。由" class"定义的属性。与View#initialize的自动选项处理无关。

如果文档说"创建View"的新实例,文档可能会更好。

然后,当您new VV({z: 123})时,{z: 123}在其initialize个参数(1.1.0之前的Backbones)中传递给options方法自动将this.options设置为构造函数选项q将位于this.q中,以便initialize看起来更像这样:

initialize: function(options) {
  console.log(options.z);
  console.log(this.q);
}

另外,如果你这样做了:

var VVV = VV.extend({q: 'pancakes'});

您要在q内替换默认VV this.q获取和'pancakes' initialize的实例。

演示:http://jsfiddle.net/ambiguous/eqBV2/

使用View#extend就像是子类化(或者更确切地说,它创建了一个新的原型实例),而new创建了新对象(或原型实例的副本)。当然,类/实例语言并不适合JavaScript的实际情况,所以我们必须小心不要过于严肃地使用术语。