And*_*rle 74 javascript inheritance backbone.js
当我覆盖a的clone()方法时Backbone.Model,有没有办法从我的植入中调用这个overriden方法?像这样的东西:
var MyModel = Backbone.Model.extend({
clone: function(){
super.clone();//calling the original clone method
}
})
Run Code Online (Sandbox Code Playgroud)
sol*_*oth 100
你会想要使用:
Backbone.Model.prototype.clone.call(this);
Run Code Online (Sandbox Code Playgroud)
这将使用(当前模型)的上下文调用原始clone()方法.Backbone.Modelthis
来自Backbone文档:
简要介绍一下super:JavaScript没有提供一种调用super的简单方法 - 在原型链上定义的同名函数更高.如果覆盖像set或save这样的核心函数,并且想要调用父对象的实现,则必须显式调用它.
var Note = Backbone.Model.extend({
set: function(attributes, options) {
Backbone.Model.prototype.set.apply(this, arguments);
...
}
});
Run Code Online (Sandbox Code Playgroud)
cha*_*sto 36
您还可以使用__super__属性作为父类原型的引用:
var MyModel = Backbone.Model.extend({
clone: function(){
MyModel.__super__.clone.call(this);
}
});
Run Code Online (Sandbox Code Playgroud)
Dav*_*der 18
Josh Nielsen 为此找到了一个优雅的解决方案,它隐藏了很多丑陋.
只需将此代码段添加到您的应用中即可扩展Backbone的模型:
Backbone.Model.prototype._super = function(funcName){
return this.constructor.prototype[funcName].apply(this, _.rest(arguments));
}
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它:
Model = Backbone.model.extend({
set: function(arg){
// your code here
// call the super class function
this._super('set', arg);
}
});
Run Code Online (Sandbox Code Playgroud)