jsのcallメソッドを詳しく解説

小云云
小云云オリジナル
2018-03-22 16:16:093587ブラウズ

この記事では主にjsのcallメソッドについて詳しく解説していますので、お役に立てれば幸いです。

メソッド呼び出し
参照
適用対象: 関数オブジェクト
バージョン 5.5 が必要
オブジェクトのメソッドを呼び出し、現在のオブジェクトを別のオブジェクトに置き換えます。
call([thisObj[,arg1[, arg2[, [,.argN]]]]])
パラメータ
thisObj
オプション。現在のオブジェクトとして使用されるオブジェクト。
arg1、arg2、、、argN
オプション。一連のメソッドパラメータが渡されます。
説明
call メソッドを使用すると、別のオブジェクトの代わりにメソッドを呼び出すことができます。 call メソッドは、関数のオブジェクト コンテキストを初期コンテキストから thisObj で指定された新しいオブジェクトに変更します。
thisObj パラメーターが指定されていない場合は、グローバル オブジェクトが thisObj として使用されます。
一見すると混乱しやすいので、最初に簡単に説明します。
obj1.method1.call(obj2,argument1,argument2)
上記のように、call の機能は obj1 のメソッドを obj2 に配置することです。後で使用してください。argument1.. これらはパラメータとして渡されます。
具体的な例を挙げてください

function add(a,b) 
{ 
    alert(a+b); 
} 
function sub(a,b) 
{ 
    alert(a-b); 
} 
add.call(sub,3,1);

この例が意味するのは、sub を add に置き換えることです、add.call(sub,3,1) == add(3,1) ため、実行結果は次のようになります。 // 注: js の関数は実際にはオブジェクトであり、関数名は Function オブジェクトへの参照です。
もう少し複雑な例を見てください

function Class1() 
{ 
    this.name = "class1"; 
    this.showNam = function() 
    { 
        alert(this.name); 
    } 
} 
function Class2() 
{ 
    this.name = "class2"; 
} 
var c1 = new Class1(); 
var c2 = new Class2(); 
c1.showNam.call(c2);
呼び出しは、c1 のメソッドを実行のために c2 に配置することを意味することに注意してください。元々、c2 には showNam() メソッドがありませんでした。現在は、c1 の showNam() メソッドを配置しています。 c2 で実行するため、 this.name は class2 である必要があり、実行結果は次のようになります。これは Java プログラマーが思いつかないことです。さらに興味深いのは、call を使用して継承を実装できることです

function Class1() 
{ 
    this.showTxt = function(txt) 
    { 
        alert(txt); 
    } 
} 
function Class2() 
{ 
    Class1.call(this); 
} 
var c2 = new Class2(); 
c2.showTxt("cc");

このように、Class2 は Class1 を継承します。Class1.call(this) は、このオブジェクトの代わりに Class1 オブジェクトを使用することを意味します。そうすると、Class2 にはすべての属性とプロパティがありません。 Class1 メソッドの場合、c2 オブジェクトは Class1 のメソッドとプロパティを直接呼び出すことができ、実行結果は次のようになります。多重継承を実装します。

function Class10() 
{ 
    this.showSub = function(a,b) 
    { 
        alert(a-b); 
    } 
} 
function Class11() 
{ 
    this.showAdd = function(a,b) 
    { 
        alert(a+b); 
    } 
} 
function Class2() 
{ 
    Class10.call(this); 
    Class11.call(this); 
}

多重継承を実現するには 2 つの呼び出しを使用します
もちろん、プロトタイプ チェーンを使用するなど、他の方法もあります。これはこの記事の範囲外です。 call について言えば、もちろん apply もあります。違いは、call の 2 番目のパラメータは任意の型であるのに対し、apply の 2 番目のパラメータは配列である必要があることです。


関連おすすめ:

JavaScriptの関数関数呼び出しメソッドのインスタンス使い方を詳しく解説

php __callメソッドの使い方解説

jsの呼び出しメソッド詳細紹介(jsの継承)_基礎知識

以上がjsのcallメソッドを詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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