Javascriptなどにも進出してい'未定義'取得しようとしたとき、配列の試作

StackOverflow https://stackoverflow.com/questions/673107

  •  21-08-2019
  •  | 
  •  

質問

と思い、午前5時、頭脳流出がうまく理解します。

obj = ['a','b'];
alert( obj.prototype ); //returns "undefined"

なぜな obj.prototype 返す関数 Array(){ } のだろうか?な参照 Array としてのコンストラクタです。

役に立ちましたか?

解決

でインスタンスなプロトタイプのクラス*ます。

おそらしたい obj.constructor.prototype ますので obj.constructor==Array

* より正確に コンストラクタ の試作が、もちろんJS機能=ラ=コンストラクタ

他のヒント

私は、あなたがオブジェクトのインスタンスからprototypeオブジェクトにアクセスできるかわかりません。次の行動はあなたを助けるかもしれません。

alert(Array); // displays "function Array() { [native code] }"
alert(Array.prototype); // displays ""
alert(['a','b'].constructor); // displays "function Array() { [native code] }"
それは、オブジェクトのコンストラクタであるとして

obj.prototypefunction Array() { ... }を返していません。

あなたの例では、objArray、ないクラスArray自体のインスタンスです。

それを理解する別の方法は、たとえば、あなたがオブジェクト(またはクラス)ののインスタンスの継承ができないということです、あなただけのオブジェクト(またはクラス)から継承することができ、それ自体、そのあなたの例では、それはあなたがなく、Arrayオブジェクトの直接のインスタンスからそのようなArrayなど、objオブジェクトから継承することができることを意味します。

ECMA仕様によると、オブジェクトのプロトタイプのリンクが表示されていないが、ほとんどの最近のブラウザ(Firefoxの、サファリ、クロム)あなたは__proto__プロパティを経由して、それを見てみましょう、そうしようとします:

obj = ['a','b'];
alert( obj.__proto__ );

オブジェクトは、建設に設定された `コンストラクタ」プロパティを持っているので、あなたは試すことができます:

obj = ['a','b'];
alert( obj.constructor.prototype );

ただし、obj.constructorはOBJの実際のプロトタイプのポインタを変更することなく、obj.constructor.prototypeことができるように、オブジェクトのcontruction後に変更することができる。

お茶の

そうでもない私のカップが、それを定義するこの方法は、「OBJ」配列作るのですか? しようとしました。

obj = new Array();
obj[0] = "a";
obj[1] = "b";

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top