0

私は自分のコードで何が起こっているのか少し戸惑っています、これが私がこれまでに持っているものです:

function Person(name) {
    this.name = name;
}

Person.prototype.getName = this.name;
Person.prototype.displayName = function() {
    return this.name;
}


var Sethen = new Person("Sethen");

console.log(Sethen.getName);
console.log(Sethen.displayName());

メソッドが正しい値を表示 するのに、なぜ値が表示されgetNamethis.name、ログが空白になるのかについて興味があります。は私のプロトタイプオブジェクトのプロパティなので、私の思考プロセスは、このようにそれをつかむことができるということでした。 displayNamegetName

getNameの値をログに記録しないのはなぜSethenですか?通常の物件のようにその情報を取得するにはどうすればよいですか?メソッドを使用する必要がありますか?

4

2 に答える 2

5

の値thisは、そのコードが実行されたときに考えられるものではないためです。thisはおそらくグローバル オブジェクト (つまりwindow) と同じです。

オブジェクトdisplayNameのインスタンスを前に付けてコンテキストを呼び出して設定しているため、関数内で正しく設定され、人の名前が取得されます。Personthis

もちろん、いつでもnameプロパティに直接アクセスできます ( Sethen.name)。

于 2012-12-23T16:31:42.677 に答える
2

問題はgetName、関数ではなく、オブジェクトが構築Person.prototype.getNameされる前に最初に割り当てられたときに値が割り当てられるプロパティです。Personそのため、特定の Person オブジェクトの値を含む可能性はありません。

プロトタイプを作成している時点では、オブジェクトのインスタンス データにアクセスすることはできません。Personこれは、オブジェクトがまだ存在していないため、インスタンス データがまだthisなく、オブジェクトを指していないためPersonです。

代わりに、コード内の値がまたは 厳密モードのオブジェクトPerson.prototype.getName = this.name;を割り当てると、未定義になるためエラーが発生します。prototypethis.namewindow.namethis

プロトタイプには、関数またはコードの初期化中に既に存在する任意のデータを割り当てることができます。プロトタイプに割り当てられたモノは、作成したそのタイプのすべてのオブジェクトに対して同じ値になります。これが、それらに関数/メソッドを割り当てることが最も役立つ理由です。

次のように実装して、特定の Person オブジェクトの値を取得できます。

function Person(name) {
    this.name = name;
}

Person.prototype.getName() = function() { 
    return this.name;
}

var Sethen = new Person("Sethen");

console.log(Sethen.getName());

もう 1 つのオプションは、.nameプロパティに直接アクセスすることです。

function Person(name) {
    this.name = name;
}
var Sethen = new Person("Sethen");
console.log(Sethen.name);
于 2012-12-23T17:13:27.477 に答える