我可以收听使用 javascript 的函数调用吗?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/14759523/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-26 22:30:43  来源:igfitidea点击:

can i listen to a function call using javascript?

javascripthtmlweb

提问by Mohamed Hédi Lassoued

How can i listen to a specific function call with parametters using javascript:

我如何使用 javascript 监听带有参数的特定函数调用:

example : when showname(2) is called i can do something like call another function too, showage(2)

示例:当调用 showname(2) 时,我也可以执行诸如调用另一个函数之类的操作,showage(2)

回答by bevacqua

you can wrap it:

你可以包装它:

var native = window.alert;

window.alert = function(){
    console.log('alerting...');
    native.apply(window, arguments);
    console.log('alerted!');
};

alert('test');

update

更新

you can do something similar with properties, using getters and/or setters:

您可以使用 getter 和/或 setter 对属性执行类似的操作:

var foo = {
     bar = 'baz'
};

into

进入

var foo = {
    _bar: 'baz',
    get bar(){
        console.log('someone is taking my bar!');
        return this._bar;
    },
    set bar(val){
        console.log('someone pretends to set my bar to "' + val + '"!');
        this._bar = val;
    }
};

alert(foo.bar);

foo.bar = 'taz';

encapsulated (private _bar):

封装(私有_bar):

var foo = function(){
    var _bar = 'baz';

    return {
        get bar(){
            console.log('someone is taking my bar!');
            return _bar;
        },
        set bar(val){
            console.log('someone pretends to set my bar to "' + val + '"!');
            _bar = val;
        }
    };
}();

回答by Lightness Races in Orbit

You can't "hook" into arbitrary function calls, no.

你不能“挂钩”到任意函数调用中,不。

回答by Matekk

One way to do it is to add a callback to the function, for example define:

一种方法是向函数添加回调,例如定义:

function showname(firstname, lastname, callback){
    alert(firstname + lastname);
    if(callback) callback();
}

function showage(){ 
   alert("who's age?");
}

And call:

并调用:

showname("John", "Doe", showage);