2

次の Javascript コードがあります。

var Person = function(name, age) {
    this.name = name;
    this.age = age;
    return this;
};

Person.prototype.getAge = function() {
    alert("Age : " + this.age);
}

var p1 = new Person("xyz",10);
p1.getAge();

これは完全に機能し、Age : 10 としてアラートを受け取ります

ここで、コードを次のように更新すると (Person オブジェクト p1 をインスタンス化した後に getAge() を定義);

var Person = function(name, age) {
    this.name = name;
    this.age = age;
    return this;
};

var p1 = new Person("xyz",10);

Person.prototype.getAge = function() {
    alert("Age : " + this.age);
}

p1.getAge();

それでも「年齢:10」として出力が返されます

Person オブジェクト p1 をインスタンス化した後に Person.prototype.getAge が定義されたので、私の質問はこれがどのように正しく機能するかです。「プロトタイプ」の仕組みのせいですか?

4

3 に答える 3

1

はい、それがプロトタイプの仕組みです。この手法を使用して、文字列、オブジェクト、および配列も拡張できます。

于 2013-02-26T13:32:51.483 に答える
1

オブジェクトのプロトタイプはいつでも変更できます。Objectベースプロトタイプを変更するライブラリ/フレームワークについて考えてみてください...組み込みのオブジェクト ( Date、など) でさえ、ページの読み込み時にすぐに変更が行われるかどうかにかかわらずString、すべての変更が行われます。Object.prototype

これを試して:

Object.prototype.myTest = function() { console.log('hi'); }
var a = new Date()
a.myTest(); //hi
于 2013-02-26T13:35:20.663 に答える
1

JavaScriptのオブジェクトには一種のチェーンがあり、プロパティを要求するとプロパティが返され、それがない場合は、p1が要求されたときにチェーンの上で見つけようとしますgetAge プロパティについては、Person.prototype で検索します。

var Person = function(name, age) {
    this.name = name;
    this.age = age;
    return this;
};

var p1 = new Person("xyz", 10);
var p2 = new Person("abc", 12);

Person.prototype.getAge = function() {
    alert("Age : " + this.age);
}
p1.getAge = function() {
    alert("I am " + this.age + " years old.");
}

p1.getAge(); // I am 10 years old.
p2.getAge(); // Age : 12

このでは、p1 は独自の getAge プロパティを持っているため、要求されるとそれを返します。一方、p2 は実際にはこのプロパティを持っていませんが、「そのチェーン」を介してアクセスでき、そのプロトタイプのプロパティを返します。

于 2013-02-26T13:35:58.153 に答える