为什么最终行评估为JavaScript中的不确定?
function Boat() {}
var myBoat = new Boat();
console.log(Boat.prototype); //Boat(){}
console.log(myBoat.__proto__); //Boat(){}
console.log(myBoat.__proto__.prototype); //undefined - why is this not Boat(){}
__proto__
属性是指实例构造函数的原型。因此,您的第二个示例与第一个记录完全相同的对象:
Boat.prototype === myBoat.__proto__;
Boat.prototype
的原型是undefined
,因为Boat.prototype
不是函数。实际上,这实际上是Object
的实例:
Boat.prototype.__proto__ === Object.prototype;
和扩展:
myBoat.__proto__.__proto__ === Object.prototype;
旁注 - 使用__proto__
属性的使用已弃用。在可能的情况下应使用Object.getPrototypeOf
:
Boat.prototype === Object.getPrototypeOf(myBoat); // Equivalent to 1st example
那是因为 myBoat.__proto__
不是一个函数,而是对象,因此它不会引起 prototype
属性。您可以尝试一下:
console.log(myBoat.__proto__.constructor.prototype);
每个对象都有一个原型,但是prototype
属性仅适用于函数或功能对象。否则,可以使用所有浏览器中的__proto__
标识符访问对象的原型。
如果__proto__
不可用,则可以从 myBoat.constructor.prototype