0

「JavaScript .prototype はどのように機能しますか?」という質問でわかるように、プロパティを使用する正しい方法prototypeは、機能オブジェクトを使用することです。しかし、なぜ機能オブジェクトを使用する必要があるのか​​ 理解できませんprototypeか?

4

3 に答える 3

1

JavaScriptで関数を作成すると、インタープリターはその関数のプロトタイプオブジェクトを自動的に作成します。これは、関数をコンストラクターとして使用できるためです。

コンストラクターとして使用できるのは関数のみで、他のオブジェクトは使用できません。

prototypeこれが、関数だけがプロパティを持っている理由です。関数のprototypeプロパティは非常に特別です。__proto__その関数のインスタンスは、チェーン内に関数のプロトタイプを持ちます。

詳細については、この回答をお読みください:https ://stackoverflow.com/a/8096017/783743

于 2013-02-19T16:07:36.027 に答える
1

あなたが参照した質問で述べたように

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クラスに追加する場合は、列挙できないことを確認する必要があります。

于 2013-02-19T16:02:06.113 に答える
1

なぜプロトタイプに機能オブジェクトが必要なのですか?

初期の JS バージョンでは、これは奇妙な (?) 言語設計上の決定でした。しかし、これは EcmaScript 5 で修正されました:Object.createコンストラクター関数なしでプロトタイプの継承を行うことができます。したがって、初期化関数が必要ない場合(クロージャーなど) は、"new" の代わりに "Object.create" を喜んで使用できます。

于 2013-02-19T16:18:44.580 に答える