有没有办法在 Javascript 函数调用之前和之后添加?我有这样的东西:
var A = {
a1: function () {
},
};
var B = {
b1: function () {
}
};
A.a1();
B.b1();
//so on ..
我需要在每种方法之前和之后发生一些事情。我可以只制作那些前后函数并分别调用它们,但我必须在代码中经常这样做并且不想重复自己。
更新: 在 ruby 中
before_filter :some_function
after_filter :some_other_function
将在该类中的每个函数调用之前执行 some_function,并在每次函数调用之后执行 some_other_function。这在 Rails 的应用程序 Controller 中也找不到。
最佳答案
您可以编写一个函数来枚举对象的字段并将其函数包装在新的函数中:
function addBefore(obj, func) {
for (var prop in obj) {
if (obj.hasOwnProperty(prop) && typeof obj[prop] === 'function') {
(function () {
var oldFunc = obj[prop];
obj[prop] = function () {
func.apply(obj, arguments);
return oldFunc.apply(obj, arguments);
}
}());
}
}
}
var A = {
a1: function (a, b) {
alert('A.a1');
return a + b;
},
a2: function (a, b) {
alert('A.a2');
return a + b;
}
};
addBefore(A, function (a, b) {
alert('before ' + a + ', ' + b);
});
A.a1(1, 2);
A.a2(3, 4);
以类似的方式,您可以编写一个函数 addAfter,只需将两个调用切换到 apply() 函数即可。
关于javascript - 用于 Javascript 的 Ruby 风格 before() 和 after() 过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17731710/