Javascriptなどにも進出してい'未定義'取得しようとしたとき、配列の試作
-
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.prototype
はfunction Array() { ... }
を返していません。
あなたの例では、obj
はArray
、ないクラス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";