我知道在 Javascript 中,变量总是通过引用分配,这意味着如果我写:
var a = {};
var b = a;
b.foo = 'string';
console.log(a.foo); // prints 'string'
是的,所以编写以下代码会返回错误:
var a = function(){};
var b = function(){};
b.foo=a;
a.bar = b;
console.log(a); // prints { [Function] bar: { [Function] foo: [Circular] } }
这没关系,因为 a.bar 指向 b,b.foo 指向 a,其 .bar 参数再次指向 b,依此类推。这是一个循环引用。
现在,我注意到以下事情:
var a = function(){};
var b = function(){};
b.foo=a;
a.prototype = b;
console.log(a); // prints [Function]
我刚刚用 a.prototype 替换了 a.bar,现在,我没有循环引用错误。
我认为这意味着 Object.prototype 不能通过引用赋值。任何人都可以确认吗?这是规则的一个例外(至少如果它是真的有一个例外)?
谢谢 !