当函数在父对象中的另一个对象上时,如何覆盖javascript对象上的函数。
示例:
function TestingABC() {
this.events = { finish: function() { console.log("FINISHED"); } };
}
function TestingXYZ() {
TestingABC.call(this);
}
TestingXYZ.prototype = Object.create(TestingABC.prototype);
我如何覆盖TestingXYZ上的events.finish函数来运行父(TestingABC)代码以及我需要编写的一些新代码?
答案 0 :(得分:0)
因为events
对象是实例的属性,而不是原型的属性,所以你可以使用类似于 monkey patching 的技术,在那里存储对当前函数的引用,然后除了执行其他操作外,还可以使用可以调用旧函数的函数覆盖当前函数。
e.g。
function TestingABC() {
this.events = { finish: function() { console.log("FINISHED"); } };
}
function TestingXYZ() {
TestingABC.call(this);
var superEvents = this.events;
this.events = {
finish: function () {
superEvents.finish();
doMyStuff();
}
};
}
TestingXYZ.prototype = Object.create(TestingABC.prototype);
答案 1 :(得分:0)
.events
是TestingABC()
构造函数的实例化属性 - 因此您可以在实例化后修改该值。
也许这样的事情就是你所追求的......
function TestingABC() {
this.events = {
finish: function() {
console.log('ABC FINISHED');
},
other: function() {
console.log('ABC OTHER');
}
};
}
function TestingXYZ() {
TestingABC.call(this);
}
TestingXYZ.prototype = Object.create(TestingABC.prototype);
TestingXYZ.prototype.callEvents = function() {
this.events.finish();
this.events.other();
}
var test1 = new TestingABC();
var test2 = new TestingXYZ();
test2.events.finish = function() {
console.log('XYZ FINISHED');
};
test1.events.finish();
test1.events.other();
//-> ABC FINISHED
//-> ABC OTHER
test2.callEvents();
//-> XYZ FINISHED
//-> ABC OTHER