我有静态属性,我想从我的Backbone.Model对象的实例访问。我知道我可以硬编码父构造函数来调用方法,但是这会阻止我使用多态静态函数。例如,如果需要,我希望能够覆盖foo
中的ExtendedInventory
函数,而无需更改任何其他代码。
var Inventory = Backbone.Model.extend({},
//STATIC
{
foo: function() {
alert('bar');
}
});
var i = new Inventory({});
i.constructor.foo(); //This works!
var ExtendedInventory = Inventory.extend({});
var ei = new ExtendedInventory({});
ei.constructor.foo(); //THIS DOES NOT WORK
//How do I generically access the `Inventory.foo()` function via the `ei` object. I would
答案 0 :(得分:4)
嗯。虽然上面的代码确实有效,但我不会这样做。如果函数可以通过类的对象在逻辑上访问,那么在基类中定义一个调用类/“静态”函数的实例方法。这使得代码更清晰,更清晰,我认为(另外,客户端不必记住有些神秘的语法):
var Inventory = Backbone.Model.extend({
foo: function() {
this.constructor.foo();
}
}, {
foo: function() {
alert('bar');
}
});
var i = new Inventory({});
i.foo(); //This works!
var ExtendedInventory = Inventory.extend({});
var ei = new ExtendedInventory({});
ei.foo();
答案 1 :(得分:2)
在您的示例中,什么不能正常工作?在Firefox和IE中,我得到两个带有'bar'的弹出框,看起来像预期的结果?它的静态部分看起来也很好,请参阅this jsfiddle。
(这是关于HEAD版本的Backbone,顺便说一下;不知道这是否有所作为)