Javascript Error: cyclic __proto__ value

Javascript Error: cyclic __proto__ value

我想更改默认的 window.location setter 和 getter 函数。

以下代码已成功运行。但此代码仅适用于有限区域。

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

我知道在正常环境下无法重新定义不可配置的属性 "location"。我更改了绑定 IDL 属性以在 webkit 库中测试这些代码。我该如何解决这个问题?


我还有一个问题。当我 运行 以下代码时,我遇到了同样的错误。(jsc - Javascript Core, Spidermonkey, nodejs)

var o1 = { p1: 1 };
var o2 = { p2: 2 };
o2.__proto__ = o1; 

var o3 = { p3: 3 };
o3.__proto__ = o2; 
o1.__proto__ = o3;

Javascript核心shell(jsc)

Exception: Error: cyclic __proto__ value

node.js (v0.10.25)

Error: Cyclic __proto__ value

蜘蛛猴JavaScript-C24.2.0

1.js:7:0 TypeError: cyclic __proto__ value

有关系吗?谢谢^^

在这两种情况下,您确实创建了一个原型链循环。
在闭包中 window 是局部变量(因为提升),因此您不会在全局 window 对象上创建原型循环。

 var o1 = { p1: 1 };
 var o2 = { p2: 2 };
 var o3 = { p3: 3 };

 o2.__proto__ = o1; 
 o1.__proto__ = o3;
 o3.__proto__ = o2; 

VM432:7 Uncaught TypeError: Cyclic __proto__ value
at Object.set __proto__ [as __proto__] (<anonymous>)
at <anonymous>:7:14

原因: JavaScript 如果我们尝试在 circle.The 中分配 __proto__ 将抛出错误引用不能绕圈.