「JavaScript .prototype はどのように機能しますか?」という質問でわかるように、プロパティを使用する正しい方法prototype
は、機能オブジェクトを使用することです。しかし、なぜ機能オブジェクトを使用する必要があるのか 理解できませんprototype
か?
3 に答える
JavaScriptで関数を作成すると、インタープリターはその関数のプロトタイプオブジェクトを自動的に作成します。これは、関数をコンストラクターとして使用できるためです。
コンストラクターとして使用できるのは関数のみで、他のオブジェクトは使用できません。
prototype
これが、関数だけがプロパティを持っている理由です。関数のprototype
プロパティは非常に特別です。__proto__
その関数のインスタンスは、チェーン内に関数のプロトタイプを持ちます。
詳細については、この回答をお読みください:https ://stackoverflow.com/a/8096017/783743
あなたが参照した質問で述べたように
var obj = new Object(); // not a functional object
obj.prototype.test = function() { alert('Hello?'); }; // this is wrong!
それObject
は、すべての基本クラスだからです。
function MyClass() {
}
var obj = new MyClass();
// it returns true even though its an instance of MyClass
console.log(obj instanceof Object);
プロトタイプ関数をObject
クラスに追加する場合は、列挙できないことを確認する必要があります。
なぜプロトタイプに機能オブジェクトが必要なのですか?
初期の JS バージョンでは、これは奇妙な (?) 言語設計上の決定でした。しかし、これは EcmaScript 5 で修正されました:Object.create
コンストラクター関数なしでプロトタイプの継承を行うことができます。したがって、初期化関数が必要ない場合(クロージャーなど) は、"new" の代わりに "Object.create" を喜んで使用できます。