isPrototypeOf和__proto__有不同的结果

时间:2017-08-24 03:39:06

标签: javascript prototype

以下两个表达式:

"abc".__proto__.__proto__ === Object.prototype  // true
Object.prototype.isPrototypeOf("abc")           // false

第一个表达式证明Object.prototype位于" abc"的原型链中。但是,第二个表达式会产生相反的结果。

我很困惑。希望任何人都能解释。

1 个答案:

答案 0 :(得分:1)

"abc"不是对象。在评估"abc".__proto__时,隐式构造String包装器对象以检索原型,Object.prototype位于该包装器对象的原型链中。

Object.prototype.isPrototypeOf("abc")不构造包装器对象。它只是查看"abc",看到"abc"不是一个对象而且没有原型链,并返回false。您可以在ECMAScript spec(版本6)中看到这一点:

  

当使用参数V调用isPrototypeOf方法时,将执行以下步骤:

     
      
  1. 如果Type(V)不是Object,则返回false。
  2.