gpt4 book ai didi

javascript - 继承 Backbone 中的 'Class' 属性

转载 作者:行者123 更新时间:2023-12-03 09:06:32 27 4
gpt4 key购买 nike

我正在尝试确定如何继承 Backbone 对象的“类”属性。类属性解释如下: https://taurenmills.wordpress.com/2011/10/08/backbone-js-with-class-properties/

我们可以使用 Backbone 进行继承,如下所示:

var BaseModel = Backbone.Model.extend({

someFunc1: function(){

},

someFunc2: function(){

}

},
{ //class properties below

newInstance: function(attrs,opts_{
var model = new BaseModel(attrs);
model.randomProp = opts.randomProp;
return model;
}

});



var SubModel = BaseModel.extend({

someFunc2: function(){ //overrides someFunc2 in BaseModel
someFunc1(); calls someFunc1 in BaseModel
}
},

{ //class properties below

newInstance: function(attrs,opts){
var model = new SubModel (attrs);
model.randomProp = opts.randomProp;
return model;
}

}
);

我的问题是:我们如何从 BaseModel 继承“类”函数?我希望 BaseModel 的子类继承类函数 newInstance

但我认为这是不可能的。来自Java,如何继承静态方法并不简单,静态方法在继承的静态方法中引用子类本身,而不是父类(super class)。

忽略我刚才所说的,换句话说,我想做这样的事情:

newInstance: function(attrs,opts){
var Constr = this.constructor; //*but* the 'this' keyword will not be available in the newInstance function, which is like a static method in Java
var model = new Constr(attrs);
model.randomProp = opts.randomProp;
return model;
}

我想要实现类函数的原因是这样我可以在每次调用该函数时在新模型实例上设置特定属性。

最佳答案

您可以使用对象的原型(prototype)从基访问方法。

例如,如果您想调用基类初始化方法,您将执行以下操作

  //base class
initialize: function (attributes, options) {
this.someProperty = options.somePropery
},

//sub class
initialize: function (attributes, options) {
BaseModel.prototype.initialize.call(this,attributes, options);
},

也就是说,继承在 JavaScript 中的工作方式(这并不是 Backbone 所独有的)与在 Java 中的工作方式确实有些不同,您可能应该阅读一些有关对象原型(prototype)的内容。

关于javascript - 继承 Backbone 中的 'Class' 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32176106/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com