用另一个原型扩展原型

时间:2014-03-20 11:02:17

标签: javascript prototype extend

如何用原型B扩展原型A,所以每当我调用原型A时,两者都会被执行?

var Helper = function() {

}
Helper.prototype.resizer = function() {   
  $('body').append(' Window resized ');
}

var Something = function() {
  // Extend Helper.resizer with Something.anything
  // extend(Helper.resizer, this.anything);
}
Something.prototype.anything = function() {   
  $('body').append(' Run this on resize to ');
}

var help = new Helper();
var some = new Something();

$(window).on("resize", function(){
  help.resizer();
});

在codepen上做了一个例子: http://codepen.io/robbue/pen/892c8f61e1b5a970d6f694a59db401a6 jQuery允许,或者只是vanilla。

1 个答案:

答案 0 :(得分:2)

我真的不明白你的问题,因为原型不是执行,但我认为你想要这样的事情:

var Helper = function() {}
Helper.prototype.resizer = function() {   
  $('body').append(' Window resized ');
}

var Something = function(h) {
  var oldresizer = h.resizer,
      that = this;
  h.resizer = function() {
      var res = oldresizer.apply(this, arguments);
      that.anything();
      return res;
  };
}
Something.prototype.anything = function() {   
  $('body').append(' Run this on resize to ');
}

var help = new Helper();
new Something(help);

$(window).on("resize", function(){
  help.resizer();
});

或那:

function Helper() {}
Helper.prototype.resizer = function() {   
  $('body').append(' Window resized ');
}

function Something() { // inherits Helper
  Helper.apply(this, arguments);
}
Something.prototype = Object.create(Helper.prototype);
Something.prototype.anything = function() {   
  $('body').append(' Run this on resize to ');
};
Something.prototype.resizer = function() {
  Helper.prototype.resizer.call(this);
  this.anything();
};

var help = new Something(help);

$(window).on("resize", function(){
  help.resizer();
});