プロトタイプメソッド。 。 。 。プロトタイプ###
たとえば、配列 Array の関数を定義します。Array.prototype.in_array = 関数 ($string) { for (var i = 0; i
{
for (i = 0; i
trueを返す;
}
}
falseを返す;
}
呼び出したら実行できます
var a = 新しい配列('a');
a.in_array('a');
存在するかどうかを確認してください
文字列例内
String.prototype.trim = function()
{
return this.replace(/^\s*|\s*$/g, '');
}
呼び出したら実行できます
var a = ' abcdefg ';
a.trime();
これにより、両側のスペースが削除されます
カスタム関数についても同様で、まず関数を作成し、プロトタイプを使用してメソッドを追加します。
JavaScript でオブジェクトを定義するためのメソッドとは何ですか
1. ファクトリ メソッド: まずオブジェクトを作成し、次にそのオブジェクトにメソッドとプロパティを追加します。閉じた後は、オブジェクトの作成に new 演算子を使用しないでください。このアプローチには、ファクトリ関数内でメソッドを定義する場合など、いくつかの欠点がありますが、呼び出されるたびに新しい関数が作成されます。
関数ファクトリー(名前、人、住所、時間){
var tmp=新しいオブジェクト;
tmp.name=名前;
tmp.person=人;
tmp.address=アドレス;
tmp.workTime=function(){
alert("私たちが仕事を始める時間は " 時間です);
}
戻り温度;
}
var 工場 1 = 工場("薬品", 100, "華山路", 10);
var 工場 2 = 工場("TCMdrugs", 100, "虹橋路", 11);
factory1.workTime();
factory2.workTime();//ここでは、factory1とfactory2ではメソッドが異なります
この問題は次の方法で改善できますが、カプセル化が不十分です
関数ファクトリー(名前、人、住所、時間){
var tmp=新しいオブジェクト;
tmp.name=名前;
tmp.person=人;
tmp.address=アドレス;
tmp.workTime=workTime();
戻り温度;
}
関数workTime(){
alert("仕事を始める時間は" this.time);
}
2. コンストラクター メソッドは、コンストラクター内で this キーワードを使用してオブジェクトを作成することを指し、使用時に new 演算子を介してインスタンス化する必要があります。ただし、このメソッドにはファクトリ メソッドと同じ問題があり、コンストラクターが呼び出されるたびに新しい関数オブジェクトが作成され、関数の作成が繰り返されることになります。
関数構成(名前、人、住所、時間) { // ここにコードロジックを記述します }
this.name=名前;
this.person=人物;
this.address=アドレス;
this.workTime=function(){
alert("仕事を始める時間は" this.time);
};
}
3. プロトタイプメソッド: 属性とメソッドを実装するには、prototype 属性を使用します。instanceof を通じてオブジェクトの型を確認できるため、関数を繰り返し作成する問題が解決されます。ただし、パラメーターを渡してプロパティを初期化することはできないことに注意してください。
関数 Car(){
}
Car.prototype.color = "赤";
Car.prototype.doors = 4;
Car.prototype.mpg = 23;
Car.prototype.showColor = function() {
アラート(この色);
};
var car1 = 新しい Car();
var car2 = 新しい Car();
しかし、次のような状況に遭遇すると、再び問題が発生します
Car.prototype.drivers = ["マイク", "スー"];
car1.drivers.push("マット");
alert(car1.drivers); //出力「マイク、スー、マット」
alert(car2.drivers); // 出力「マイク、スー、マット」
drivers は Array オブジェクトへのポインターであり、Car の両方のインスタンスは同じ配列を参照します。
4. 混合コンストラクター/プロトタイプ メソッド: プロトタイプ メソッドの解決策
関数 Car(sColor、iDoors、iMpg) { this.color = sColor; this.doors = iドア; this.mpg = iMpg; }
this.color = sColor;
this.doors = iDoors;
this.mpg = iMpg;
this.drivers = ["マイク", "スー"];
}
Car.prototype.showColor = function () { // あなたのコード }
アラート(この色);
};
var car1 = 新しい車("赤", 4, 23);
var car2 = 新しい車("青", 3, 25);
car1.drivers.push("マット");
alert(car1.drivers);
alert(car2.drivers);
5. 動的プロトタイプ手法: これは非常に推奨される手法で、以前の手法の問題を回避し、より使いやすいコーディング スタイルを提供します。
関数 Car(sColor、iDoors、iMpg) { this.color = sColor; this.doors = iドア; this.mpg = iMpg; }
this.color = sColor;
this.doors = iDoors;
this.mpg = iMpg;
this.drivers = ["マイク", "スー"];
If (Car.initialized の種類 == "未定義"){
Car.prototype.showColor = function () { // あなたのコード }
アラート(この色);
};
Car.initialized = true;
}
}
var car1 = 新しい車("赤", 4, 23);
var car2 = 新しい車("青", 3, 25);
car1.drivers.push("マット");
alert(car1.drivers);
alert(car2.drivers);
6. 混合ファクトリ メソッド: ファクトリ メソッドに似ていますが、インスタンス化に new キーワードを使用します。工場出荷時の方法と同じ欠点がありますが、お勧めできません。
以上がJavaScript はクリックで呼び出せる非表示のようなメソッドをどのように定義していますかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。