// jb51.net のコード
function person (名前) {
this.Name = 名前;
}
person.prototype.SayHello = function() {
alert('Hello, ' this.Name); >person.prototype.SayBye = function() {
alert('Goodbye, ' this.Name);
ただし、作成とメンテナンスの都合上、 public メソッドの宣言をオブジェクトに書き込み、それを Person.prototype に割り当てます。例:
function Person(name) {
this.Name = name;
}
person.prototype = {
SayHello: function() {
alert('Hello, ' this.Name);
},
SayBye: function() {
alert('Goodbye, ' this.Name); Name);
}
}
このメソッドを使用すると、このクラスに多数の public メソッドがある場合に、この名前の場合に多くの Person 識別子を維持する必要がなくなります。クラスをある日変更する必要がある場合、変更点は 2 つだけです。1 つは関数の宣言で、もう 1 つはプロトタイプの前の識別子です。前者のメソッドを使用する場合、パブリック メソッドは N 個だけ必要になります。 1 識別子は維持する必要がありますが、検索と置換は使用できますが、安定性の観点から、検索と置換ではエラーが発生する可能性があり、維持コストが増加します。
このメソッドはメンテナンスに利便性をもたらしますが、クラスのコンストラクター属性が失われるという別の隠れた問題も引き起こします。
function person1 (名前) {
this.Name = name;
}
person1.prototype.SayHello = function() {
alert('Hello, ' this.Name); }
person1.prototype.SayBye = function() {
alert('Goodbye, ' this.Name)
}
// jb51.net からのコード
function Person2(name); {
this.Name = 名前;
}
person2.prototype = {
SayHello: function() {
alert('Hello, ' this.Name);
SayBye: function() {
alert('Goodbye, ' this.Name)
}
}
alert(new Person1('Bill').constructor); alert(new Person2('Steve').constructor);
上記のテスト コードを実行すると、person1 のコンストラクター属性は person1 クラスのコンストラクターですが、person2 のコンストラクター属性であることがわかります。 is Object の場合、コンストラクター属性を使用してオブジェクトの種類を決定する必要があるときに問題が発生します。
したがって、JavaScript クラスを作成するときに、オブジェクトの型を取得するためにコンストラクター属性を使用する必要がない場合は、個人的には 2 番目の記述方法を使用することを好みますが、コンストラクター属性を使用してオブジェクトの型を取得する必要がある場合は、独自のリフレクション メカニズムまたは GetType 関数を実装します。お待ちください。その場合は、最初の記述方法を使用する必要があります。
もちろん、独自のリフレクション メカニズムや GetType 関数を実装するときにコンストラクター属性に依存しない場合は、独自の型を識別するための追加のメンバー変数を維持するなど、両方の記述方法を使用できます。 js.class などの既製の JS フレームワークを使用することもできます。これは個人のニーズに応じて異なります。