ホームページ  >  記事  >  ウェブフロントエンド  >  js呼び出しメソッドの詳しい紹介(jsの継承)_基礎知識

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

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

call メソッド

を参照 適用対象: 関数オブジェクト

バージョン 5.5 が必要
オブジェクトのメソッドを呼び出し、現在のオブジェクトを別のオブジェクトに置き換えます。

call([thisObj[,arg1[, arg2[, [,.argN]]]]])
パラメータ
thisObj
オプション。現在のオブジェクトとして使用されるオブジェクト。
arg1、arg2、、、argN
オプション。一連のメソッドパラメータが渡されます。
説明
call メソッドを使用すると、別のオブジェクトの代わりにメソッドを呼び出すことができます。 call メソッドは、関数のオブジェクト コンテキストを初期コンテキストから thisObj で指定された新しいオブジェクトに変更します。

thisObj パラメーターが指定されていない場合は、グローバル オブジェクトが thisObj として使用されます。

----------------------------------------------- --- ---------------------------------------------------
一見すると混乱しやすいので、最初に簡単に説明します。
obj1.method1.call(obj2, argument1, argument2)
上記のように、call の機能はメソッドを配置することです。 obj2 上の obj1 を後で使用します。これらはパラメータとして渡されます。

具体的な例を示します

コードをコピーします コードは次のとおりです:

関数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) したがって、実行結果は次のようになります:alert(4); // 注: js の関数は実際にはオブジェクトであり、関数名は Function オブジェクトへの参照です。


もう少し複雑な例を見てください

コードをコピーします コードは次のとおりです:

関数 Class1()
{
this.name = "class1";

this.showNam = function()
{
alert(this.name);
}
}

関数 Class2()
{
this.name = "class2";
}

var c1 = new Class1();
var c2 = new Class2();

c1.showNam.call(c2);


call は、c1 のメソッドを c2 に実行することを意味することに注意してください。元々、c2 には showNam() メソッドがありませんでした。 c1 のメソッドを配置することです。 showNam() メソッドは実行のために c2 に配置されるため、this.name は class2 である必要があり、実行結果は次のようになります。 どうですか、面白いと思います。オブジェクト a にオブジェクト b のメソッドを実行させることができます。これは Java プログラマが思いつかないことです。さらに興味深いのは、呼び出しを使用して継承を実装できることです。


コードをコピーします コードは次のとおりです。
function Class1()
{
this.showTxt = function(txt)
{
alert(txt);
}
}
関数 Class2()

{
Class1.call(this);
}

var c2 = new Class2();

c2.showTxt("cc");


このように、Class2 は Class1 を継承します。Class1.call(this) は、このオブジェクトの代わりに Class1 オブジェクトを使用することを意味します。 Class2 のもの Class1 のすべてのプロパティとメソッド、c2 オブジェクトは Class1 のメソッドとプロパティを直接呼び出すことができ、実行結果は次のようになります。
はい、以上です。これが JavaScript がオブジェクト指向で継承をシミュレートする方法であり、多重継承も実装できます。


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 つの呼び出しを使用することで実現されます

もちろん、プロトタイプチェーンを使用するなど、js の継承には他の方法もあります。これはこの記事の範囲外です。呼び出しの使用法を説明するだけです。 >call について言及しましたが、もちろん apply もあります。これら 2 つのメソッドは基本的に同じ意味を持ちます
違いは、call の 2 番目のパラメーターは任意の型にできるのに対し、apply の 2 番目のパラメーターは配列でなければならないことです
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。