Firefox和chrome在constructor.prototype之间的行为区别?

P K*_*P K 6 javascript firefox dom google-chrome

经过这么多时间的实验,我发现__proto__或者Object.getPrototypeOf()方法是在DOM对象中遍历原型链的正确方法.

使用一系列constructor.prototype实际上并不遍历两个浏览器中的原型链.(虽然这是ECMA标准中定义的方式,但构造函数的prototype属性是您的原型对象).

欢迎任何建议或评论......

p1 = document.getElementById("test");  // div element

//Prototype Object of p1
p2 = element.constructor.prototype;

//Prototype object of p2
p3 = element.constructor.prototype.constructor.prototype;

console.log(p2 === p3);  // true in chrome(howcome they same ?), false in firefox

q2 = element.__proto__;
q3 = element.__proto__.__proto__;

console.log(q2 === q3);  // false in both browser
Run Code Online (Sandbox Code Playgroud)

Bor*_*sky 0

我认为您误解了构造函数/原型的工作原理。

给定一个构造函数,它的 .prototype 将是用它构造的事物的原型。原型的 .constructor 指向构造函数。

所以特别Element.prototype.constructor === Element应该持有。由于错误,它不一定在浏览器中。这就是为什么你在 Chrome 中看到 p2 == p3 的原因。