有没有人有过覆盖alert()JavaScript函数的经验?
我有一个函数,a()我想要覆盖,但也有原始a()的顺序执行,具体取决于上下文.例如,有时当我生成页面时,我想要覆盖如下:
function a() {
new_code();
original_a();
}
Run Code Online (Sandbox Code Playgroud)
有时像这样:
function a() {
original_a();
other_new_code();
}
Run Code Online (Sandbox Code Playgroud)
我如何original_a()在超越范围内获得这一点a()?它甚至可能吗?
请不要以这种方式建议替代方法,我知道很多.我特意问这个问题.
假设你有以下代码:
function A() {
function modify(){
x = 300;
y = 400;
}
var c = new C();
}
function B() {
function modify(){
x = 3000;
y = 4000;
}
var c = new C();
}
C = function () {
var x = 10;
var y = 20;
function modify() {
x = 30;
y = 40;
};
modify();
alert("The sum is: " + (x+y));
}
Run Code Online (Sandbox Code Playgroud)
现在的问题是,如果有任何方法,我可以modify使用A和B中的方法覆盖C中的方法.在Java中,您将使用super关键字,但是如何在JavaScript中实现类似的功能呢?
我正在尝试装饰一些对象,例如:
Object.prototype.someFunc = function(x) {
if (x == 1) {
return x;
}
return super.someFunc() // <-- ?
}
Run Code Online (Sandbox Code Playgroud)
如何在第二个 return 语句上调用我要重写的函数?
我正在尝试找出 SPA 中的一个问题,即某个事件被触发太多次。考虑到这一点,我想重写节点的eventEmitter.on函数来添加一些登录,然后调用原始函数。这让我在/sf/answers/729943021/上找到了关于覆盖的答案window.alert,我想出了以下代码:
// Ignore `state` here but it essentially means I can access `eventEmitter` all over my app.
var EventEmitter = ('events')
state.eventEmitter = new EventEmitter()
state.eventEmitter.on = (function (original) {
return function (name, callback) {
console.log('On Called for %s', name)
original(name, callback)
}
})(state.eventEmitter.on)
Run Code Online (Sandbox Code Playgroud)
这不起作用。该事件根本没有触发,我在控制台中没有看到任何内容。
我究竟做错了什么?
注意:我还有其他方法可以追踪我的原始问题,但我很感兴趣为什么上面的代码不起作用。