javascript 中原型链的末端是什么——null 还是 Object.prototype?

use*_*782 6 javascript oop prototype object

我一直在阅读 JavaScript 中的原型链,并得出了两个略有不同的定义。据说 JavaScript 中的每个对象都有一个原型,而该原型又具有另一个原型。顶级原型(Grand)也可能有原型,链条可以继续。现在链将在最后一个对象处停止。JavaScript 的好部分说链终止于Object.prototypeMDNnull是链终止的最后一个链接。

Javascript:好的部分

每个对象都链接到一个原型对象,它可以从中继承属性。从对象字面量创建的所有对象都链接到Object.prototypeJavaScript 标准对象。


MDN

每个对象都有一个到另一个对象的内部链接,称为它的原型。该原型对象有自己的原型,依此类推,直到到达一个以 null 作为原型的对象。null,顾名思义,没有原型,作为这个原型链的最后一环

问题:

  • javascript 中原型链的末端是什么——null 还是 Object.prototype?或者是nullObject.prototype一回事?
  • 不是从对象文字创建的对象是否没有链接到Object.prototype?
  • 说我有一个对象var x = { len: 4, breadth: 5}。JavaScript 会自动创建它的原型吗x.prototype?原型链有多长?将x.prototype只有一个原型Object.prototype制作 3 点链?
    • JavaScript 内部如何创建自动原型?

nop*_*ole 6

  1. 就像,如果纽约有一个信封,里面写着科罗拉多,科罗拉多有一个信封,里面写着旧金山,旧金山有一个信封,里面写着“无”。那么旧金山是链条的末端,还是“无”是链条的末端?这可能取决于您如何看待它。但有一件事是肯定的:它指向链的上方和上方,用于继承目的(原型继承),直到它到达null,这意味着不能再往上走。并确保您知道,要向上和向上链,它是__proto__。不是prototype

  2. Object.prototypeAnimal.prototype不同于x.__proto__。前者是具有prototype指向原型对象的属性的函数对象(Object、Animal)。并且x.__proto__是如何向上跟踪原型链。往上走,就是x.__proto__.__proto__这样等等。请参阅JavaScript 的伪经典继承图以了解更多。

  3. Object.prototype指原型对象。 引自 MDNnull“表示有意缺少任何对象值。它是 JavaScript 的原始值之一。” 所以Object.prototypenull不是一回事。

  4. 所有 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)