2017-12-04 12 views
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 

さて、なぜStringコンストラクタ関数(String .__ proto__)のプロトタイプは何ですか?

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

なく

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

プロトタイプチェーンを歩いているとき?

文字列とオブジェクトのプロトタイプは何ですか?

+0

*文字列インスタンス*と*オブジェクトプロトタイプ*の間は* Stringプロトタイプ* –

+1

廃止予定の '.__ proto__'ゲッターは使用しないでください。代わりに 'Object.getPrototypeOf'を使用してください。 – Bergi

答えて

-1

instanceof Objectを使用すると、変数がObjectまたはObjectのいずれかであることを意味します。

here"instanceof演算子は、コンストラクタのプロトタイププロパティがオブジェクトのプロトタイプチェーンのどこにでも現れるかどうかをテストします。

のでmString.__proto__Object.prototypeに等しいではありませんが、それObject.prototypeは彼らが等しくない理由です、プロトタイプチェーンに確かに高いです。 StringプロトタイプはObjectプロトタイプを継承します。

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

Stringはコンストラクタ関数なので、関数のプロトタイプです。

+0

これは、Stringだけでなくすべてのクラスに当てはまります。たとえば、 '(class A {}).__ proto__ === Function.prototype'は真です –

+0

クラスは関数コンストラクタの構文上の砂糖なので、 –

+0

みんなありがとう。 – JSstruck

関連する問題