javascript - 每次调用对象中的任何函数时运行一个函数

标签 javascript

<分区>

如果我有一个看起来像这样的对象:

var animal = { 
    cat: function() { alert('woof'); },
    dog: function() { alert('meow'); }
}

如何将另一个函数“附加”到 animal,以便它在 animal 对象中的任何函数被调用时运行? (无需在每个例程中手动调用它)

最佳答案

for (var p in animal) {
    if (typeof animal[p] === "function") {
        animal[p] = make(animal[p]);
    }
}

function make(fn) {
    return function() {
        console.log("this is called for every animal");
        // call the original
        return fn.apply(this, arguments);
    }
}

make() 函数接受一个函数参数,并返回一个新函数。

新函数做任何你想做的事(在本例中它只是调用 console.log()),然后调用原始函数。

当它调用原始代码时,它会设置 this 的当前值并传递 arguments。它通过使用 Function.prototype.apply 调用函数来实现这一点,它从第一个参数设置 this 值,并将参数作为第二个参数的集合传递。

它还会返回从您的函数返回的任何值。

关于javascript - 每次调用对象中的任何函数时运行一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16907431/

相关文章:

Javascript 将变量传递给超时函数

javascript - 使用ajax和json将数组从php发送到js

javascript - Jquery 脚本问题 IE7 添加/删除类

javascript - Object, Object 和 [1 : Object, 2 : Object]? 有什么区别

javascript - 永久占位符?

javascript - 序列化 hasMany 为 "Where"

c# - 使用javascript循环遍历c#数组中的值

javascript - 直到 localStorage.getItem 为 '1' - Javascript

javascript - 使用 jEditable、jQuery 和 DataTables 更新表中的单元格

javascript - 带参数的 Ajax.BeginForm JavaScript 回调导致 $(this) 引用窗口而不是表单