String构造函数的原型是什么(String.__proto__)?

3
var mString = new String('A');

console.log(typeof mString); // object

console.log(mString instanceof String); // true

console.log(mString instanceof Object); // true

console.log(mString.__proto__ === String.prototype); // true

console.log(mString.__proto__.__proto__ === Object.prototype); // true 

现在,为什么呢?
console.log(String.__proto__.__proto__ === Object.prototype); // true

而不是

console.log(String.__proto__ === Object.prototype); // false

当沿着原型链向上查找时?

在String和Object原型之间有什么?


在一个字符串实例对象原型之间是字符串原型 - Jonas Wilms
1
不要使用已弃用的 .__proto__ getter。请改用 Object.getPrototypeOf - Bergi
2个回答

2
Function.prototype === String.__proto__ //true

这是一个函数的原型,因为String是一个构造函数。


值得注意的是,这对所有类都适用,而不仅仅是字符串。例如(class A {}).__proto__ === Function.prototype也是正确的。 - Joseph Ditton
因为类只是函数构造器上的语法糖。 - Michael Kurowski
太棒了。谢谢,伙计们。 - JSstruck

-1

当您使用instanceof Object时,它意味着变量是一个Object或"扩展"了一个Object

此处所述,"instanceof运算符测试构造函数的原型属性在对象的原型链中是否出现过。"

因此,mString.__proto__不等于Object.prototype,但它确实在原型链上高于Object.prototype,这就是它们不相等的原因。String原型继承了Object原型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接