继承' Class' Backbone中的属性

时间:2015-08-24 06:56:28

标签: javascript inheritance backbone.js

我试图确定如何继承" class" 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,如何继承在继承的静态方法中引用子类本身的静态方法,而不是超类,并不简单。

忽略我刚才说的话,换句话说,我想做的事情如下:

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;
 }

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

也就是说,继承在JavaScript中确实有点不同(这对骨干来说并不是唯一的),它在Java中是如何工作的,你可能应该阅读一下对象原型。