0

だから私はプロトタイプについて多くのことを読んでいて、ほとんどの場合、次のことを理解しています。

var Animal = function(species) {
    this.species = species;
};
Animal.prototype.getSpecies = function() {
    return this.species;
}
var myDog = new Animal("Anderson");    
alert(myDog.getSpecies());

新しい種を作成し、プロトタイプを Animal に設定してから、getSpecies() を呼び出すことができることも理解しています。うん!

私を混乱させるのはこれです:

var Person = function(firstName, lastName) {
    this.firstName= firstName;
    this.lastName= lastName
};

var meToo = { fName: "ken", lName: "N" };
alert(meToo.constructor.prototype);  // [object Object]
alert(Person.constructor.prototype); // function Empty(){}

http://jsfiddle.net/r0k3t/s8Sx7/9/

Person のプロトタイプが function() {} である理由を説明する何かを見つけようとしていましたか? グローバルオブジェクト「this」(この場合はウィンドウ)に設定されると思いました。また、そのプロパティを列挙できないのはなぜですか? これを読むと、constructor.prototype を使用して「ウィンドウ」と思われるオブジェクトを取得し、プロパティを列挙することができることが示唆されます。

明らかに何かが欠けています - ありがとう!

4

1 に答える 1

3

Personオブジェクトのプロトタイプは、 Person.prototype. ではありませんPerson.constructor.prototype。これは非常に異なります。

Person.constructorFunctionすべての関数を構築する関数です。Personは関数なので、.constructorですFunction

Functionオブジェクト (すべての関数)のプロトタイプは、 Function.prototype. だから、Person.constructor.prototype === Function.prototype

プレーン オブジェクトのコンストラクタはObject関数です。すべてのプレーン オブジェクトのプロトタイプは でありObject.prototype、これは"[object Object]"(詳細を見るには よりも優先) ですconsole.diralert

プレーン オブジェクトとは、{}またはで作成されたものすべてを意味します。new Object()

于 2012-12-17T15:23:46.383 に答える