扩展类时继承而不是覆盖属性/方法

Inherit and not overriding attributes/methods when extending classes

本文关键字:覆盖 属性 方法 继承 扩展      更新时间:2023-09-26

要继承而不是像onRender/onShow/initialize那样覆盖方法,我知道我可以使用prototype.onRender.apply()。 但是有没有一种更干净的继承方式,而不是每次都写它?

两个控制台.log将在new MyView2() ... .show()时打印

var MyView = Marionette.ItemView.extend({
  onRender: function () {
    console.log('MyView onRender');
  }
});

var MyView2 = MyView.extend({
  onRender: function () {
    MyView.prototype.onRender.apply(this, arguments);
    console.log('MyView2 onRender');
  }
});

不,在 ES5 中,这几乎是最好的,并且在木偶内部到处使用 - 使用 Backbone 另一种选择是使用 ES6 的__super__或转译

var MyView2 = MyView.extend({
  onRender() {
    MyView2.__super__.onRender.apply(this, arguments);
    console.log('MyView2 onRender');
  }
});

不确定我是否正确回答了您的问题,但您似乎在寻找默认的继承机制:

var MyView = Marionette.ItemView.extend({
  onRender: function () {
    console.log('MyView onRender');
  }
});

var MyView2 = MyView.extend({
  // MyView2 will inherit onRender from MyView
});
MyView2.prototype.onRender === MyView.prototype.onRender // true