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 に答える