我相信我在backbone.js 方面有很好的背景,但我有一个我不明白的问题。
假设我们有这两个视图:
BaseView = Backbone.View.extend({
foo: {},
initialize: function(options) {
this.render();
},
render: function() {
// ...
}
});
PageView = BaseView.extend({
render: function() {
this.foo.bar = 23;
}
});
如果我们在两个视图中检查属性 'foo',显然,它将是一个空对象:
> BaseView.prototype.foo
Object {}
> PageView.prototype.foo
Object {}
但是如果我们创建一个 PageView 实例,来自 BaseView 的 'foo' 属性将会改变。这怎么可能?
> page = new PageView()
> page.foo
Object {foo: 23}
> BaseView.prototype.foo
Object {foo: 23}
[编辑]
实际上,这是一个通用的 OOP 问题。在蟒蛇中:
class A(object):
foo = {}
class B(A):
def __init__(self):
self.foo['bar'] = 23
>>> print A.foo
{}
>>> b = B()
>>> print A.foo
{'bar': 23}