<分区>
如果我有一个看起来像这样的对象:
var animal = {
cat: function() { alert('woof'); },
dog: function() { alert('meow'); }
}
如何将另一个函数“附加”到 animal
,以便它在 animal
对象中的任何函数被调用时运行? (无需在每个例程中手动调用它)
标签 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 - 使用ajax和json将数组从php发送到js
javascript - Jquery 脚本问题 IE7 添加/删除类
javascript - Object, Object 和 [1 : Object, 2 : Object]? 有什么区别
javascript - 序列化 hasMany 为 "Where"
javascript - 直到 localStorage.getItem 为 '1' - Javascript
javascript - 使用 jEditable、jQuery 和 DataTables 更新表中的单元格
javascript - 带参数的 Ajax.BeginForm JavaScript 回调导致 $(this) 引用窗口而不是表单