原型构造函数链有多长?
How long is the prototype constructor chain?
我正在阅读 Mozilla 对原型继承的解释 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain。想在 chrome 控制台中尝试一些示例。
function f() {
this.a =1;
this.b =2;
}
let o = new f();
f.prototype.b =3;
f.prototype.c =4;
我注意到函数 f() 的原型有一个构造函数,它也有一个原型,它继续如下所示:
f.prototype.constructor.prototype.constructor.prototype.constructor.prototype.constructor.prototype.constructor
现在根据 mozilla 文档“每个对象都有一个私有的 属性,它持有另一个对象的 link,称为它的原型。那个原型对象有它自己的原型,等等直到到达一个以null为原型的对象。根据定义,null没有原型,在这个原型链中充当最后的link
我确定我看错了角度。有人可以在这里提出一些观点。究竟是怎么回事?为什么我们有一个无休止的构造函数和原型链?
你有一个循环引用。给定一个函数,您可以访问它的 prototype
属性 以获取将成为任何实例的 内部原型 的对象。
function f() {
this.a =1;
this.b =2;
}
let o = new f();
console.log(f.prototype === Object.getPrototypeOf(o));
在这个 .prototype
对象上,您可以访问它的 constructor
属性 以返回关联的函数。
函数的 .prototype
和原型的 .constructor
是相互链接的。给出其中一个,您可以访问另一个。
f
的实际 原型链是:
f <- Function.prototype <- Object.prototype
o
的原型链是:
o <- f.prototype <- Object.prototype
请注意 .prototype
属性 而不是 引用的对象是您正在调用它的对象的内部原型。要获得某些对象 obj
的内部原型,您必须使用 Object.getPrototypeOf
(或 __proto__
,已弃用)。 .prototype
属性 是 函数 的特殊 属性 ,它将引用可能创建的该函数的任何实例的内部原型。例如 const instance = new SomeClass()
将导致 instance
具有 SomeClass.prototype
.
的内部原型
我正在阅读 Mozilla 对原型继承的解释 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain。想在 chrome 控制台中尝试一些示例。
function f() {
this.a =1;
this.b =2;
}
let o = new f();
f.prototype.b =3;
f.prototype.c =4;
我注意到函数 f() 的原型有一个构造函数,它也有一个原型,它继续如下所示: f.prototype.constructor.prototype.constructor.prototype.constructor.prototype.constructor.prototype.constructor
现在根据 mozilla 文档“每个对象都有一个私有的 属性,它持有另一个对象的 link,称为它的原型。那个原型对象有它自己的原型,等等直到到达一个以null为原型的对象。根据定义,null没有原型,在这个原型链中充当最后的link
我确定我看错了角度。有人可以在这里提出一些观点。究竟是怎么回事?为什么我们有一个无休止的构造函数和原型链?
你有一个循环引用。给定一个函数,您可以访问它的 prototype
属性 以获取将成为任何实例的 内部原型 的对象。
function f() {
this.a =1;
this.b =2;
}
let o = new f();
console.log(f.prototype === Object.getPrototypeOf(o));
在这个 .prototype
对象上,您可以访问它的 constructor
属性 以返回关联的函数。
函数的 .prototype
和原型的 .constructor
是相互链接的。给出其中一个,您可以访问另一个。
f
的实际 原型链是:
f <- Function.prototype <- Object.prototype
o
的原型链是:
o <- f.prototype <- Object.prototype
请注意 .prototype
属性 而不是 引用的对象是您正在调用它的对象的内部原型。要获得某些对象 obj
的内部原型,您必须使用 Object.getPrototypeOf
(或 __proto__
,已弃用)。 .prototype
属性 是 函数 的特殊 属性 ,它将引用可能创建的该函数的任何实例的内部原型。例如 const instance = new SomeClass()
将导致 instance
具有 SomeClass.prototype
.