javascriptは種類の方式の3を書きます.
2144 ワード
前の二つの長所を取る:
a、構造関数でクラスの属性(フィールド)を定義する
b、プロトタイプでクラスを定義する方法.
第三の方法があります.このような方式は採用する人が多いようです.
3、総合構造関数/原型
このようにすれば、構造関数によって異なるnameを構築することができ、対象事例もget Name方法を共有し、メモリの無駄を生じない.
しかし、このようなコードスタイルは、Javaのクラスほどコンパクトではないようです.属性、構造方法(関数)、方法は、大括弧に包まれています.
jsコードのスタイルをよりコンパクトにするために、プロトタイプのメソッドコードをfunction Personの大かっこに移動します.
不思議なようです.このように書くことができます.検証してみます
エラーがありません.コンソールも正しく出力しました.説明はこのように書いてもいいです.
うん、完璧そうです.
a、オブジェクトの例を参照して作成することができます.
b、対象事例はすべて同じ方法を共有し、メモリの無駄を生じない
c、コードスタイルもコンパクトです.
ただし、newのオブジェクトは毎回実行されます.
Person.prototype.getName=function() return this.name;
不必要な反復演算をもたらした.get Nameメソッドはprototypeにかけるので、一回だけ実行すればいいです.少し改造するだけで:
new二つのオブジェクト、
a、構造関数でクラスの属性(フィールド)を定義する
b、プロトタイプでクラスを定義する方法.
第三の方法があります.このような方式は採用する人が多いようです.
3、総合構造関数/原型
/**
* Person : , name, getName
* @param {String} name
*/
function Person(name) {
this.name = name;
}
Person.prototype.getName = function() {
return this.name;
}
このようにすれば、構造関数によって異なるnameを構築することができ、対象事例もget Name方法を共有し、メモリの無駄を生じない.
しかし、このようなコードスタイルは、Javaのクラスほどコンパクトではないようです.属性、構造方法(関数)、方法は、大括弧に包まれています.
public class Person {
// ( )
String name;
// ( )
Person(String name) {
this.name = name;
}
//
String getName() {
return this.name;
}
}
jsコードのスタイルをよりコンパクトにするために、プロトタイプのメソッドコードをfunction Personの大かっこに移動します.
function Person(name) {
this.name = name;
Person.prototype.getName = function() {
return this.name;
}
}
不思議なようです.このように書くことができます.検証してみます
var p1 = new Person("Jack");
var p2 = new Person("Tom");
console.log(p1.getName());//Jack
console.log(p2.getName());//Tom
エラーがありません.コンソールも正しく出力しました.説明はこのように書いてもいいです.
うん、完璧そうです.
a、オブジェクトの例を参照して作成することができます.
b、対象事例はすべて同じ方法を共有し、メモリの無駄を生じない
c、コードスタイルもコンパクトです.
ただし、newのオブジェクトは毎回実行されます.
Person.prototype.getName=function() return this.name;
不必要な反復演算をもたらした.get Nameメソッドはprototypeにかけるので、一回だけ実行すればいいです.少し改造するだけで:
function Person(name) {
this.name = name;
if(Person._init==undefined) {
alert(" !");
Person.prototype.getName = function() {
return this.name;
}
Person._init = 1;
}
}
new二つのオブジェクト、
var p1 = new Person("Andy");// new ' !'
var p2 = new Person("Lily");// new