use*_*782 6 javascript oop prototype object
我一直在阅读 JavaScript 中的原型链,并得出了两个略有不同的定义。据说 JavaScript 中的每个对象都有一个原型,而该原型又具有另一个原型。顶级原型(Grand)也可能有原型,链条可以继续。现在链将在最后一个对象处停止。JavaScript 的好部分说链终止于Object.prototype
,MDN说null
是链终止的最后一个链接。
Javascript:好的部分
每个对象都链接到一个原型对象,它可以从中继承属性。从对象字面量创建的所有对象都链接到
Object.prototype
JavaScript 标准对象。
MDN
每个对象都有一个到另一个对象的内部链接,称为它的原型。该原型对象有自己的原型,依此类推,直到到达一个以 null 作为原型的对象。null,顾名思义,没有原型,作为这个原型链的最后一环。
问题:
null
和Object.prototype
一回事? Object.prototype
? var x = { len: 4, breadth: 5}
。JavaScript 会自动创建它的原型吗x.prototype
?原型链有多长?将x.prototype
只有一个原型Object.prototype
制作 3 点链?
就像,如果纽约有一个信封,里面写着科罗拉多,科罗拉多有一个信封,里面写着旧金山,旧金山有一个信封,里面写着“无”。那么旧金山是链条的末端,还是“无”是链条的末端?这可能取决于您如何看待它。但有一件事是肯定的:它指向链的上方和上方,用于继承目的(原型继承),直到它到达null
,这意味着不能再往上走。并确保您知道,要向上和向上链,它是__proto__
。不是prototype
。
Object.prototype
,Animal.prototype
不同于x.__proto__
。前者是具有prototype
指向原型对象的属性的函数对象(Object、Animal)。并且x.__proto__
是如何向上跟踪原型链。往上走,就是x.__proto__.__proto__
这样等等。请参阅JavaScript 的伪经典继承图以了解更多。
Object.prototype
指原型对象。 引自 MDN,null
“表示有意缺少任何对象值。它是 JavaScript 的原始值之一。” 所以Object.prototype
和null
不是一回事。
所有 JavaScript 对象都obj.__proto__
将最终Object.prototype
引用所指的内容。如果不是 obj.__proto__
,那么就是obj.__proto__.__proto__
。如果没有,就向上,再向上,就会到达Object.prototype
所指的原型对象。而此时,当你上一级时(通过添加一个.__proto__
,然后你得到null
。你可以在谷歌浏览器的开发者工具中尝试它:
x = { a : 1 }
> Object {a: 1}
x.__proto__ === Object.prototype
> true
x.__proto__.__proto__
> null
Object.prototype.__proto__
> null
Run Code Online (Sandbox Code Playgroud)