我在Chrome浏览器中使用ECMAScript 6代理(需要“启用实验JavaScript”标志)。我粘贴在控制台下面的代码(从here拍摄):为什么Proxy.create返回“TypeError”
var loggable = function(obj, logger) {
return Proxy.create({
get: function get(receiver, prop) {
logger.info('Getting ' + prop);
return obj[prop];
}
});
};
var person = { name: 'Alice', age: 22 };
person = loggable(person, {
info: function info(str) {
console.log(str);
}
});
结果是:
Getting splice
Getting splice
"TypeError"
任何人都可以解释为什么person
的splice
财产被访问两次,为什么我们得到"TypeError"
?
Proxy.create({
get: function get(receiver, prop) { console.log(prop); }
});
Chrome的探测对象,试图发现它的类型:
所以你只是在代理对象上做'person.splice'?我没有在Firefox中看到这种行为,但我还没有在Chrome中进行过测试。 –
...刚刚在Chrome中测试过,并且它不会产生您在执行'person.splice'时描述的结果。 –
现在我看到我错过了您在控制台中进行测试。这是我的承诺...谁在乎控制台是否有奇怪的东西,只要你的代码按照预期的方式工作就可以了!控制台的实现都有不同程度的吸引力。 –