在Backbone中访问父类

Ind*_*ial 67 javascript oop inheritance class backbone.js

我需要initialize从继承的MyModel类中调用父类的方法,而不是像我今天那样完全覆盖它.

我怎么能这样做?

这是我的代码现在看起来的样子:

BaseModel = Backbone.Model.extend({
    initialize: function(attributes, options) {
        // Do parent stuff stuff
    }
});

MyModel = BaseModel.extend({
    initialize: function() {
        // Invoke BaseModel.initialize();
        // Continue doing specific stuff for this child-class.
    },
});
Run Code Online (Sandbox Code Playgroud)

Yur*_*nko 128

尝试

MyModel = BaseModel.extend({
    initialize: function() {
        BaseModel.prototype.initialize.apply(this, arguments);
        // Continue doing specific stuff for this child-class.
    },
});
Run Code Online (Sandbox Code Playgroud)


Ray*_*nos 51

MyModel = BaseModel.extend({
    initialize: function() {
        MyModel.__super__.initialize.apply(this, arguments);
        // Continue doing specific stuff for this child-class.
    },
});
Run Code Online (Sandbox Code Playgroud)

  • http://documentcloud.github.com/backbone/#Model-extend关于super的简要说明:JavaScript没有提供一种调用super的简单方法 - 在原型链上定义的同名函数更高.如果覆盖像set或save这样的核心函数,并且想要调用父对象的实现,则必须显式调用它... (6认同)
  • `__ super __`不打算直接使用它,正如强调名称所暗示的那样. (5认同)
  • @Raynos:为什么不``BaseModel.prototype.initialize.apply(this,arguments);`?这应该没有`__super__`. (5认同)
  • FWIW Jeremy Ashkenas [**states**](https://github.com/jashkenas/backbone/pull/787#issuecomment-3143358)"__super__"不打算直接使用. (4认同)

roo*_*ler 11

当我试图在我的模型中继承时,这对我有用:

MyModel.prototype.initialize.call(this, options);
Run Code Online (Sandbox Code Playgroud)

参考http://documentcloud.github.com/backbone/#Model-extend

谢谢.


whe*_*hys 5

我想是的

MyModel = BaseModel.extend({
    initialize: function() {
        this.constructor.__super__.initialize.call(this);
        // Continue doing specific stuff for this child-class.
    },
});
Run Code Online (Sandbox Code Playgroud)

  • 我想将参数传递给initialize函数,这是唯一适用于我的函数this.constructor .__ super __.initialize.call(this,arguments); (2认同)