以下两个表达式:
"abc".__proto__.__proto__ === Object.prototype // true
Object.prototype.isPrototypeOf("abc") // false
第一个表达式证明Object.prototype
位于" abc"的原型链中。但是,第二个表达式会产生相反的结果。
我很困惑。希望任何人都能解释。
答案 0 :(得分:1)
"abc"
不是对象。在评估"abc".__proto__
时,隐式构造String
包装器对象以检索原型,Object.prototype
位于该包装器对象的原型链中。
Object.prototype.isPrototypeOf("abc")
不构造包装器对象。它只是查看"abc"
,看到"abc"
不是一个对象而且没有原型链,并返回false。您可以在ECMAScript spec(版本6)中看到这一点:
当使用参数V调用isPrototypeOf方法时,将执行以下步骤:
- 如果Type(V)不是Object,则返回false。
醇>