1
我想更改默認的window.location setter和getter函數。Javascript錯誤:循環__proto__值
以下代碼已成功工作。但是這個代碼只是工作有限的領域。
var _window = window;
(function() {
window = {};
var window = {};
Object.defineProperty(window, 'location', {
get: function() { alert('called getter '); return _window.location; },
set: function() { alert('not in my house'); }
});
window.__proto__ = _window;
alert('window.location : '+ window.location);
}());
當我刪除該塊,
var _window = window;
window = {};
var window = {};
Object.defineProperty(window, 'location', {
get: function() { alert('called getter '); return _window.location; },
set: function() { alert('not in my house'); }
});
window.__proto__ = _window;
alert('window.location : '+ window.location);
我遇到下面的錯誤。
ERROR Error: cyclic __proto__ value
我知道,不能在正常環境中重新定義的非可配置的屬性「位置」。我更改了綁定IDL屬性以在webkit庫中測試這些代碼。我怎麼解決這個問題?
我還有一個問題。當我運行以下代碼,我遇到了同樣的錯誤。(JSC - 的Javascript核心,SpiderMonkey的,的NodeJS)
var o1 = { p1: 1 };
var o2 = { p2: 2 };
o2.__proto__ = o1;
var o3 = { p3: 3 };
o3.__proto__ = o2;
o1.__proto__ = o3;
JavaScriptCore的外殼(JSC)
Exception: Error: cyclic __proto__ value
的node.js(v0.10.25)
Error: Cyclic __proto__ value
的SpiderMonkey JavaScript的C24.2.0
1.js:7:0 TypeError: cyclic __proto__ value
它有關係嗎?謝謝^^
不要操縱'__proto__' –
謝謝你回答我的問題。我的主要目的是檢測變化的window.location或在setter中注入一些代碼。你有什麼想法或方法嗎? Object.observe和Object.watch在webkit環境中尚不支持。但我可以將DOM對象更改爲可配置或可替換的。 – guest
搜索JavaScript注入或查看AOP庫的來源,如何包裝原始對象。 –