为什么这在JavaScript中计算为未定义?

为什么这在JavaScript中计算为未定义?,javascript,prototype,Javascript,Prototype,为什么最后一行在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(){} 这是因为myBoat.\u

为什么最后一行在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(){}

这是因为
myBoat.\uuuu proto\uuuu
不是一个函数,而是一个对象,因此它不包含
prototype
属性。你可以试试这个:

console.log(myBoat.__proto__.constructor.prototype);

这是因为
myBoat.\uuuu proto\uuuu
不是一个函数,而是一个对象,因此它不包含
prototype
属性。你可以试试这个:

console.log(myBoat.__proto__.constructor.prototype);

\uuuu proto\uuu
属性引用实例构造函数的原型。因此,第二个示例记录的对象与第一个完全相同:

Boat.prototype === myBoat.__proto__;
船的原型。原型
未定义的
,因为
船。原型
不是一个函数。事实上,它实际上是
对象的一个实例,因此:

Boat.prototype.__proto__ === Object.prototype;
进而:

myBoat.__proto__.__proto__ === Object.prototype;

旁注-不推荐使用
\uuu proto\uu
属性。如有可能,应改为使用:

Boat.prototype === Object.getPrototypeOf(myBoat); // Equivalent to 1st example

\uuuu proto\uuu
属性引用实例构造函数的原型。因此,第二个示例记录的对象与第一个完全相同:

Boat.prototype === myBoat.__proto__;
船的原型。原型
未定义的
,因为
船。原型
不是一个函数。事实上,它实际上是
对象的一个实例,因此:

Boat.prototype.__proto__ === Object.prototype;
进而:

myBoat.__proto__.__proto__ === Object.prototype;

旁注-不推荐使用
\uuu proto\uu
属性。如有可能,应改为使用:

Boat.prototype === Object.getPrototypeOf(myBoat); // Equivalent to 1st example

每个对象都有一个原型,但
prototype
属性仅适用于函数或函数对象。否则,可以在除IE之外的所有浏览器中使用
\uuuu proto\uuu
标识符访问对象的原型


如果
\uuuu proto\uuuu
不可用,可以从构造函数属性中获取原型,如
myBoat.constructor.prototype
每个对象都有一个原型,但
prototype
属性仅适用于函数或函数对象。否则,可以在除IE之外的所有浏览器中使用
\uuuu proto\uuu
标识符访问对象的原型


如果
\uuuu proto\uuuu
不可用,可以从构造函数属性中获取原型,如
myBoat.constructor.prototype

您是否注意到
myBoat.prototype
也是
未定义的
?您是否注意到
myBoat.prototype
也是
未定义的
?@cookiemonster-它指的是内部
[[prototype]]
对象的属性,在本例中是构造函数的原型(如
myBoat.\uuuu proto\uuuu==Boat.prototype
@CookieMoster-它指的是对象的内部
[[prototype]]
属性,在本例中是构造函数的原型(如
myBoat.\uuuu proto\uuuu===Boat.prototype所示
)。