ホームページ  >  記事  >  ウェブフロントエンド  >  Javascript_javascript スキルでの呼び出しの 2 つの使用例

Javascript_javascript スキルでの呼び出しの 2 つの使用例

WBOY
WBOYオリジナル
2016-05-16 17:09:15944ブラウズ

使用法 1 (一般的な使用法):

式は object.method.call(another object) で、現在のオブジェクトを別のオブジェクトに置き換えて、現在のオブジェクトのメソッドを実行することを意味します。まず例を見てみましょう:

コードをコピー コードは次のとおりです。

function Class1(){
this .name = "class1";
this.showName = function(){
alert(this.name);
}
}
function Class2(){
this.name = "クラス 2 ";
}
var c1 = 新しい Class1();
var c2 = 新しい Class2(); c1.showName.call(c2);

c2.showName(); //実行できません

最初に Class1 と Class2 という 2 つの関数を定義しました。これらの主な違いは、Class2 には Class1 よりも showName() メソッドが 1 つ多いことです。次に、Class1 と Class2 に対応するオブジェクト c1 と c2 が定義されています。この時点で、c1 には showName() メソッドがありますが、c2 には存在しないことが明確にわかります。しかし、奇跡が起こりました。c1.shoName.call(c2) を実行すると、c2 の名前の値、つまり「class2」が表示されます。実際には、まだ c1 のメソッドを実行していますが、オブジェクト c2 をオブジェクト c1 に一時的に置き換えただけです。実行後も、それらは定義されたときと同じであり、c2 にはそれ以上のメソッドはありません。 c2 にさらにメソッドがあるかどうかを検出するために、この例では c2.showNmae(); という行を追加します。これは実行できません。ブラウザは「オブジェクト # にはメソッド 'showName' がありません」というエラーを報告します。

なぜこんなことをするのですか?前に述べたように、これは一時的な使用方法であり、効率的なプログラミングのために使用するだけです。ただし、これには制限がないわけではありません。c1 と c2 が置換オブジェクトと置換オブジェクトを表すために使用され、fun1 が c1 の固有メソッドを表すために使用されるとします。 1. fun1 がパラメータを必要とせず、親関数でローカル変数を使用しない場合、実際には c1.fun1.call(c2) と c1.fun1() に違いはありません。 2. fun1 がパラメータを必要としない場合、で親関数の変数を使用する場合、c1 と c2 の関数内で同じ名前で fun1 によって使用される変数を生成する必要があります。 fun1 にパラメータが必要な場合、形式は c1.fun1.call(c2) として書き換える必要があります。 、パラメータ 1、パラメータ 2 、...パラメータ n)、このとき、c1 を生成する関数内の変数名は、c2 を生成する関数内の変数名と同じである必要はありません。対応する。実際、call を使用する場合、c2 と c1 は構造と機能が非常に類似していることが多いため、上記の 3 つの点は簡単に回避できます。

使用法 2:

関数の定義プロセスで、別の既存の function.call(this) の形式で使用され、別の既存の関数のすべての変数とメソッドを独自の関数にクローンして、同様の継承機能を実現します。例を挙げてみましょう:

コードをコピー コードは次のとおりです:
function Animal(name){
this.name = name;
this.showName = function(){
alert(this.name);
}
};
var Animal = new Animal("small_animal");

animal.showName() //alert("small_animal")

function Cat(name){

Animal.call(this, name);
};

//var Animal = null //コメントを解除して試してみましょう

var cat = new Cat("black_cat");

cat.showName() //alert("black_cat")

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。