function Gadget(name, color) { this.name = name; this.color = color; }
Gadget.prototype.rating = 3 var newtoy = new Gadget("webcam", "black") newtoy.constructor.prototype.constructor.prototype.constructor.prototype
它总是返回 rating = 3 的对象。
但是,如果我执行以下操作:
newtoy.__proto__.__proto__.__proto__
链条最终返回null。
null
同样在 Internet Explorer 中,如果没有__proto__属性,我将如何检查 null?
__proto__
我最近一直在努力解决这个问题,最后想出了这张“地图”,我认为它可以充分说明这个问题
http://i.stack.imgur.com/KFzI3.png
我知道我不是第一个编造这个的人,但弄清楚它比找到它更有趣:-)。无论如何,在那之后我发现了另一个我认为基本相同的图表:
Javascript对象布局
对我来说最令人惊讶的是发现它Object.__proto__指向Function.prototype,而不是Object.prototype,但我相信这是有充分理由的 :-)
Object.__proto__
Function.prototype
Object.prototype
如果有人想测试它,我也会在此处粘贴图像中提到的代码。请注意,一些属性被添加到对象中,以便在一些跳转后轻松知道我们在哪里:
Object.O1=''; Object.prototype.Op1=''; Function.F1 = ''; Function.prototype.Fp1 = ''; Cat = function(){}; Cat.C1 = ''; Cat.prototype.Cp1 = ''; mycat = new Cat(); o = {}; // EDITED: using console.dir now instead of console.log console.dir(mycat); console.dir(o);