8

我有我想从我的 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 
4

2 回答 2

5

唔。虽然上面的代码确实有效,但我不会那样做。如果该函数可通过类的对象在逻辑上访问,则在调用类/“静态”函数的基类中定义一个实例方法。我认为这使代码更清晰、更清晰(另外,客户不必记住有些晦涩的语法):

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();
于 2011-06-30T16:32:00.437 回答
2

在您的示例中,什么不完全有效?在 Firefox 和 IE 中,我得到两个带有“bar”的弹出窗口,看起来像预期的结果?它的静态部分似乎也表现良好,请参阅此 jsfiddle

(顺便说一句,这是 Backbone 的 HEAD 版本;不知道这是否会有所不同)

于 2011-06-28T21:28:37.443 回答