小编典典

__proto__ 与 constructor.prototype 有何不同?

all

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

同样在 Internet Explorer 中,如果没有__proto__属性,我将如何检查 null?


阅读 67

收藏
2022-08-21

共1个答案

小编典典

我最近一直在努力解决这个问题,最后想出了这张“地图”,我认为它可以充分说明这个问题

http://i.stack.imgur.com/KFzI3.png
在此处输入图像描述

我知道我不是第一个编造这个的人,但弄清楚它比找到它更有趣:-)。无论如何,在那之后我发现了另一个我认为基本相同的图表:

Javascript对象布局

对我来说最令人惊讶的是发现它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);
2022-08-21