我有一个基本视图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
,我该怎么做?
在这个例子中,我试图理解这个继承系统
q
和z
类似于要定义的虚拟/抽象值
子类。
答案 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的实际情况,所以我们必须小心不要过于严肃地使用术语。