0

我有一个 JavaScript 对象

myObject = function () {
    var that = {};
    ...
    that.myMethod1 = myMethod1;
    that.myMethod2 = myMethod2;
    ...
    that.myMethodN = myMethodN;
    return that;
}

我想为每个方法添加完全相同的前后逻辑。例如用于进入方法和退出方法的日志。

我可以使用 prePostLogic 函数,例如

function prePostLogic(f2) {
    console.log('>> enter');
    f2();
    console.log('<< exist');
}

然后做:

myObject = {
    ...
    that.myMethod1 = prePostLogic(myMethod1);
    that.myMethod2 = prePostLogic(myMethod2);
    ...
    that.myMethodN = prePostLogic(myMethodN);
    return that;
}

但我真正想要的是不必包装每个方法,而是编写一些可以迭代所有方法并为我包装它们的东西。因此,当有人添加新方法时,他们不必包装它。

请帮我?

谢谢

4

2 回答 2

1
function prePostLogic(f2) {
    return (function(){
        console.log('>> enter');
        f2();
        console.log('<< exit');
    });
}


var func = function(){
   console.log("Hello World");
}

var method = prePostLogic(func);

method();

在你的情况下

for (var prop in myObject){
    if(typeof myObject[prop] == "function"){
         myObject[prop] = prePostLogic(myObject[prop]);
    }
}
于 2013-06-10T17:41:39.950 回答
1

可以遍历所有方法并为我包装它们的东西

没错,就是这样做:

for (var prop in that)
    that[prop] = makePrePostLogic(that[prop]);

function makePrePostLogic(fn) {
    return function withLogic() {
        console.log(">> enter "+fn.name);
        var res = fn.apply(this, arguments);
        console.log("<< exit "+fn.name);
        return res;
    };
}
于 2013-06-10T17:22:02.683 回答