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

时间:2015-01-10 10:04:26

标签: javascript marionette

要继承而不是覆盖onRender/onShow/initialize之类的方法,我知道我可以使用prototype.onRender.apply()。但有没有更简洁的继承方式,而不是每次都写它?

两个console.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');
  }
});

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

NOP,在ES5中,它与它一样好,并且在Marionette中使用all over the place internally - 使用Backbone另一个选项是使用__super__或从ES6转发

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