【问题标题】:can i listen to a function call using javascript?我可以使用 javascript 收听函数调用吗?
【发布时间】:2013-01-23 10:46:15
【问题描述】:

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

示例:当调用 showname(2) 时,我也可以调用另一个函数,showage(2)

【问题讨论】:

  • 修改函数即可。
  • 使用回调可能吗?
  • 在函数内部添加函数调用语句

标签: javascript html web


【解决方案1】:

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

【讨论】:

  • 您可以像@bevacqua 所假设的那样包装原始函数。
【解决方案2】:

你可以把它包装起来:

var native = window.alert;

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

alert('test');

更新

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

var foo = {
     bar = 'baz'
};

进入

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';

封装(私有_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;
        }
    };
}();

【讨论】:

  • 现在我记得包装了 console.error 以获取控制台错误以进行日志记录...我也有一个单元测试:D
【解决方案3】:

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

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

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

然后调用:

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

【讨论】:

  • imo,回调不是对“我可以使用 javascript 监听函数调用吗?”问题的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-22
  • 1970-01-01
  • 2012-03-07
  • 2020-04-30
  • 2013-01-21
相关资源
最近更新 更多