1

私は現在、プロトタイプの継承が JavaScript でどのように機能するかを正確に把握しようとしています。これが私が現在解決しようとしている謎です。

次の構造を設定するとします。

var base = { greet : "hello" }

var child = function () {}

child.prototype = base;
child.prototype.protoSomething = function () {}

var instance = new child();

派手なものはありません。instance次に、プロパティ (所有またはその他) の内容を見てみましょう。

for(prop in instance) {
    console.log(prop); // prints 'greet', 'protoSomething'
}

よし、それはgreetprotoSomethingを持っている、彼らinstance自身のメンバーですか?

for(prop in instance) {
    if(instance.hasOwnProperty(prop))
        console.log(prop); // nothing is printed
}

いいえ、自分のプロパティ リストは空です。彼らはinstanceのプロトタイプに入っていますか?

if(instance.prototype === undefined) {
    console.log("'instance' has no prototype"); // gets printed
}

残念ながら、instanceプロトタイプが割り当てられていません。では、プロパティが独自のものではなく、プロトタイプがない場合、それらはどこから来ているのでしょうか? この時点で、ある種の図がとてもいいと思います。

4

2 に答える 2

4

関数だけがプロパティを持っています prototype

instance.constructor.prototype === base // return true

オブジェクトのプロトタイプを取得するには、Object.getPrototypeOfメソッドを使用する必要があります。

Object.getPrototypeOf(instance) === base // return true
于 2012-08-17T15:11:05.683 に答える
1

このページはあなたを助けるはずです:

http://joost.zeekat.nl/constructors-considered-mildly-confusing.html

つまり、インスタンスの「舞台裏」のプロトタイプ ( を介して作成new) にはアクセスできないため、 が返されますundefined。コンストラクター (プロパティを手動で設定した.prototypeもの) のみが、取得しようとすると何かを返します。

于 2012-08-17T15:17:08.283 に答える