aw *_*rud 8 javascript prototypal-inheritance backbone.js
我有静态属性,我想从我的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
Run Code Online (Sandbox Code Playgroud)
唔。虽然上面的代码确实有效,但我不会那样做。如果该函数可通过类的对象在逻辑上访问,则在调用类/“静态”函数的基类中定义一个实例方法。这使代码更清晰,我认为(此外,客户不必记住有些神秘的语法):
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();
Run Code Online (Sandbox Code Playgroud)
在你的例子中,什么不起作用?在 Firefox 和 IE 中,我都会看到两个带有“bar”的弹出窗口,这看起来像预期的结果吗?它的静态部分似乎也表现良好,请参阅此 jsfiddle。
(这是 Backbone 的 HEAD 版本,顺便说一句;不知道这是否有区别)
| 归档时间: |
|
| 查看次数: |
6773 次 |
| 最近记录: |