0

tracedObj.squared(9)未定義を返すのはなぜですか?

これは、それ自体のオブジェクトでメソッドを呼び出した後、呼び出しobjに対して間違ったスコープにあるというスコープに関係している可能性があります。thissquared

コード

"use strict";
var Proxy = require('harmony-proxy');

function traceMethodCalls(obj) {
   let handler = {
       get(target, propKey, receiver) {
            const origMethod = target[propKey];
            return function(...args) {
                let result = origMethod.apply(this, args);
                console.log(propKey + JSON.stringify(args) + ' -> ' + JSON.stringify(result));
            };
       }
   };
   return new Proxy(obj, handler);
}

let obj = {

     multiply(x, y) {
        return x * y;
     },
     squared(x) {
        return this.multiply(x, x);
     }
};

let tracedObj = traceMethodCalls(obj);
tracedObj.multiply(2,7);

tracedObj.squared(9);
obj.squared(9);

出力

multiply[2,7] -> 14
multiply[9,9] -> 81
squared[9] -> undefined
undefined

ノード v4.4.3 を使用しています (これらを使用するには時期尚早ですか?)

コードを実行する

次のようにコマンドを実行する必要があります。

node --harmony-proxies --harmony ./AOPTest.js

4

1 に答える 1

2
return function(...args) {
    let result = origMethod.apply(this, args);
    console.log(propKey + JSON.stringify(args) + ' -> ' + JSON.stringify(result));
};

不足している

return result;
于 2016-06-15T18:34:47.917 に答える