ES6:harmony-proxies:为什么 `tracedObj.squared(9)` return 未定义?
ES6: harmony-proxies: Why does `tracedObj.squared(9)` return undefined?
为什么 tracedObj.squared(9)
return 未定义?
这可能与 obj
的作用域处于错误的作用域有关,因为它在 squared
中调用了它自己的对象上的方法后 this
调用。
代码
"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
我正在使用 node v4.4.3(现在使用这些是不是太早了?)
运行 代码
我必须 运行 这样的命令:
node --harmony-proxies --harmony ./AOPTest.js
return function(...args) {
let result = origMethod.apply(this, args);
console.log(propKey + JSON.stringify(args) + ' -> ' + JSON.stringify(result));
};
丢失
return result;
为什么 tracedObj.squared(9)
return 未定义?
这可能与 obj
的作用域处于错误的作用域有关,因为它在 squared
中调用了它自己的对象上的方法后 this
调用。
代码
"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
我正在使用 node v4.4.3(现在使用这些是不是太早了?)
运行 代码
我必须 运行 这样的命令:
node --harmony-proxies --harmony ./AOPTest.js
return function(...args) {
let result = origMethod.apply(this, args);
console.log(propKey + JSON.stringify(args) + ' -> ' + JSON.stringify(result));
};
丢失
return result;