0

私が理解していることから、プロトタイプオブジェクトは、他のオブジェクトがプロパティとメソッドを継承するオブジェクトであり、基本的に、オブジェクトを作成したコンストラクター関数を参照またはポイントするコンストラクタープロパティを保持します。次のコードを検討してください:

function Animal()
{
this.name="no name";
}

function Cat()
{
    Animal.Call(this);          //Please Explain
    this.mood="sleepy";
}

Cat.prototype=new Animal();     //Cat inheriting Animal?
Cat.prototype.constructor=Cat;  //Please Explain

コメント付きのコード行とリフレクションの概念を明確に説明してください。ありがとうございます。

4

1 に答える 1

1

の目的は何ですかAnimal.call(this)

super()他のプログラミング言語で呼び出すようなものです。Animal作成したばかりの新しいオブジェクト( )で親コンストラクター()を呼び出しますthis。これは、に関するMDNドキュメント.callでも説明されています。

あなたの例では、にをAnimal割り当て"no name"ますthis.nameAnimal.call(this);したがって、を呼び出した後、前述の値を持つプロパティがありますthisname

Cat.prototype.constructor=Cat;

デフォルトでは、各プロトタイプのconstructorプロパティは、それが属する関数を指します。ただし、プロトタイプを。で上書きしているためCat.prototype=new Animal();constructorプロパティは別の関数を指していることになります。この場合、からnew Animal継承するオブジェクトを返すのでAnimal.prototypeCat.prototype.constructorはを指しAnimalます。これを修正するために、Cat再度割り当てます。

constructorプロパティは内部関数で使用されないため、厳密に言えば、これは必要ありません。ただし、コードがそれに依存している場合は、正しい値に設定する必要があります。

于 2013-02-22T14:14:00.057 に答える