我在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'時描述的結果。 –
現在我看到我錯過了您在控制檯中進行測試。這是我的承諾...誰在乎控制檯是否有奇怪的東西,只要你的代碼按照預期的方式工作就可以了!控制檯的實現都有不同程度的吸引力。 –