5

重複の可能性:
Javascript コンストラクター プロパティの重要性は何ですか?

developer.mozilla.orgの Javascriptドキュメントには、継承のトピックに関する例があります。

// inherit Person
Student.prototype = new Person();

// correct the constructor pointer because it points to Person
Student.prototype.constructor = Student;

ここでプロトタイプのコンストラクター プロパティを更新する必要があるのはなぜでしょうか。

4

1 に答える 1

2

関数にはprototypeプロパティがあり(定義していなくても)、prototypeオブジェクトにはconstructor(関数自体を指す)唯一のプロパティがあります。したがって、Student.prototype = new Person(); constructorのプロパティを実行した後、関数prototypeを指してPersonいるので、リセットする必要があります。

魔法のようなものと見なすべきではありませんprototype.constructor。それは関数への単なるポインタです。行をスキップしても、Student.prototype.constructor = Student;行は正常new Student();に機能します。

constructorプロパティは、たとえば次の状況で役立ちます(オブジェクトのクローンを作成する必要があるが、どの関数がオブジェクトを作成したかが正確にわからない場合)。

var st = new Student();
...
var st2 = st.constructor();

したがって、prototype.constructor()正しいことを確認することをお勧めします。

于 2013-01-10T10:10:34.663 に答える