超级骨干

当我重写Backbone.Modelclone()方法时,有没有办法从我的植入中调用这个重写方法? 像这样的东西:

var MyModel = Backbone.Model.extend({
    clone: function(){
        super.clone();//calling the original clone method
    }
})

你会想要使用:

Backbone.Model.prototype.clone.call(this);

这将调用原始clone()从法Backbone.Model用的情况下this (目前的模式)。

来自骨干文档:

除了super之外,JavaScript并不提供一种简单的方法来调用超级函数 - 在原型链上定义的同名函数。 如果你重写一个像set或save这样的核心函数,并且你想调用父对象的实现,你必须明确地调用它。

var Note = Backbone.Model.extend({
 set: function(attributes, options) {
 Backbone.Model.prototype.set.apply(this, arguments);
 ...
 }    
});

您也可以使用__super__属性,该属性是对父类原型的引用:

var MyModel = Backbone.Model.extend({
  clone: function(){
    MyModel.__super__.clone.call(this);
  }
});

乔希尼尔森找到了一个优雅的解决方案,这掩盖了很多丑陋。

只需将此代码段添加到您的应用中即可扩展Backbone的模型:

Backbone.Model.prototype._super = function(funcName){
    return this.constructor.prototype[funcName].apply(this, _.rest(arguments));
}

然后像这样使用它:

Model = Backbone.model.extend({
    set: function(arg){
        // your code here

        // call the super class function
        this._super('set', arg);
    }
});
链接地址: http://www.djcxy.com/p/18045.html

上一篇: Super in Backbone

下一篇: what exactly is "call"/"apply" doing here?