【问题标题】:Inheriting 'Class' properties in Backbone在 Backbone 中继承“类”属性
【发布时间】:2015-08-24 06:56:27
【问题描述】:

我正在尝试确定如何可能继承 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;
 }

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

【问题讨论】:

    标签: javascript inheritance backbone.js


    【解决方案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 中的工作方式确实有点不同,您可能应该阅读一下对象原型。

    【讨论】:

    • 感谢 Jack,是的,我更多地指的是“静态”/类方法的继承如何在 JavaScript 中工作。这些静态方法确实以某种方式在 Java 中被继承,但我不确定 JS。
    • 我不确定您到底想做什么,但正如我在回答中指出的那样,您确实可以访问 *inherited*/child 类中的父方法。如果您没有实现/覆盖具有相同名称的方法,您可以在不使用原型的情况下在子类中调用它。
    • 我不能做我想做的事,我也不能用 Java 做。我想做的是与所有 SubModel 实例共享 BaseModel 中的静态/类方法。但问题是我需要在 BaseModel 静态方法中引用 SubModel 类,这是不可能的,或者只是糟糕的设计。很难解释。但我很确定。我刚刚创建了一个独立于模型类的工厂方法。如果您对为什么这不起作用感兴趣,我可以向您展示一个 Java 示例。
    • 退后一步也许是个好主意,你想做什么?这是jsbin,它可能更好地展示了您如何完成听起来像您要求的事情。如果您认为 Java 示例可以更好地说明您想要做什么,您可以发布该示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    • 2011-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    相关资源
    最近更新 更多