【问题标题】:How do I know when the prototype chain ends?我怎么知道原型链何时结束?
【发布时间】:2021-07-06 18:18:49
【问题描述】:

在第一种情况下,原型链比在第二种情况下更长。

function Func() {};
Func.__proto__ == Function.prototype; //true
Func.__proto__.__proto__ == Object.prototype; //true
Func.__proto__.__proto__.__proto__ == Object.prototype; //false
Func.__proto__.__proto__.__proto__.__proto__ == Object.prototype; //Cannot read property '__proto__' of null

在第二种情况下,它更短。

let obj = {};
    obj.__proto__ == Object.prototype; //true
    obj.__proto__.__proto__ == Object.prototype; //false
    obj.__proto__.__proto__.__proto__ == Object.prototype; //Cannot read property '__proto__' of null

为什么?第二个示例obj .__ proto __.__ proto__ == Object.prototype 的行给出了错误。但在第一种情况下,类似的代码行Func .__ proto __.__ proto__ == Object.prototype 给出了 true。

有什么区别?为什么第一个示例的原型链比第二个更长?这取决于什么?

【问题讨论】:

  • 一个的原型链比另一个长。因为里面的东西比较多。对象的原型链中有多少东西是您正在处理的对象的第一个原型。

标签: javascript prototype


【解决方案1】:

函数也是 Javascript 中的对象。将其视为级别,它们比链/树中的对象低一级。

因此,如果定义了任何函数,其__proto__ 将是Function.prototype。 Function.prototype 的__proto__ 将是Object.prototype

注意:当我们执行 let obj ={} 时,在后台 obj 被创建为 Object 的实例。 Object 的任何实例都将其__proto__ 设置为Object.prototype

【讨论】:

【解决方案2】:

我如何知道原型链何时结束?

当你递归地请求Object.getPrototypeOf(foo)(或foo.__proto__)并且答案最终返回null时,你知道原型链何时结束。

原型链可以是任意长度。你可以有一个对象的原型Sailboat.prototype,原型Boat.prototype,原型Vehicle.prototype,原型Mappable.prototype,原型Object.prototype。这是一组非常合理的原型关系,如果您想要更具体的帆船类型,您也可以在其开头添加其他内容,例如,Catamaran.prototype 具有原型 Sailboat.prototype

在这种情况下,一个函数对象有原型Function.prototype,它有一个原型Object.prototype。由{} 字面量创建的对象的原型为Object.prototype。在这两种情况下,Object.prototype 都没有父级;它是两条链的根,所以Object.prototype.__proto__null

说起来是重言式,但原型链就是这么长。你可以不断地获得原型父母,直到你不能再获得,这就是原型链的长度。

【讨论】:

    【解决方案3】:

    有什么区别?为什么第一个示例的原型链比第二个更长?它取决于什么?

    只是第一个例子是一个函数,所以它有Function.prototype作为它的直接原型。在第二个示例中不是这种情况,它没有任何特殊的“子类型”,因此直接委托给Object.prototype

    【讨论】:

      猜你喜欢
      • 2015-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-29
      • 2011-12-01
      • 1970-01-01
      相关资源
      最近更新 更多