我的意图:
- 使用对象
o
和方法work
- 在
o.work()
之前打印“Hello” - 在
o.work()
之后打印“Bye” o.work()
将由第 3 方调用
我的尝试:
// sample library object
var o = {
score: 5,
work: function() {
console.log(this.score);
}
};
// my code
var cons = function () {
this.score = 10;
this.work = function () {
console. log("Hello");
// how to call parent's work() ?
// if I do this.prototype.work() -> prints 5
// But parent's work should be called when this.score is 10
console. log("Bye");
};
};
cons.prototype = o;
my_o = new cons();
// my_o will be passed to 3rd party instead of o
简而言之:
- 我正在尝试装饰继承的方法。
- 使用 super 很容易,但 JavaScript 没有 super。
他们说原型(prototype)继承是优越的。
更新:
work()
使用 this.score,继承后会被覆盖。
更新 2:
- 期望
o.work()
应打印5
- 期望
my_o.work()
应打印10
最佳答案
有点难看,但是你可以调用cons.prototype.work;
var Cons = function () {
this.work = function () {
alert('Hello');
cons.prototype.work.call(this); // <= here
alert('Bye');
};
};
或者更通用:
var Cons = function () {
this.parentwork = arguments.callee.prototype.work;
this.work = function () {
alert('Hello');
this.parentwork.call(this);
alert('Bye');
};
};
查看此jsFiddle
关于JavaScript : How to override and wrap a method from parent object?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20757377/