ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScriptにおけるapply、call、bindの使い方の違い_基礎知識

JavaScriptにおけるapply、call、bindの使い方の違い_基礎知識

WBOY
WBOYオリジナル
2016-05-16 15:06:351599ブラウズ

JS では、この 3 つは関数の this オブジェクトのポイントを変更するために使用されます。これらの違いは何ですか。

違いについて説明する前に、3 つの類似点をまとめてみましょう:

1. これらはすべて、関数の this オブジェクトのポイントを変更するために使用されます。

2. 最初のパラメータは、これが指すオブジェクトです。

3. 後続のパラメータを使用してパラメータを渡すことができます。

では、まず例を見てみましょう。

        var xw = {
            name : "小王",
            gender : "男",
            age : 24,
            say : function() {
                alert(this.name + " , " + this.gender + " ,今年" + this.age);                
            }
        }
        var xh = {
            name : "小红",
            gender : "女",
            age : 18
        }
        xw.say();

それ自体は特に言うべきことはありません。写っているのは今年 24 歳のシャオ・ワンさんでしょう。
では、xwのsayメソッドを使ってxhのデータを表示する方法を説明します。
電話の場合は、次のようにすることができます:

1.xw.say.call(xh);

適用するには、次の操作を実行できます:

1.xw.say.apply(xh);

バインドの場合は次のようにする必要があります:

1.xw.say.bind(xh)();

xw.say.bind(xh) を直接書いた場合、結果は得られません。違いがわかりますか? call と apply はどちらも関数への直接呼び出しであり、bind メソッドは引き続き関数を返すため、後で呼び出すには () が必要です。
それでは、call と apply の違いは何でしょうか?例を少し書き直してみましょう。

        var xw = {
            name : "小王",
            gender : "男",
            age : 24,
            say : function(school,grade) {
                alert(this.name + " , " + this.gender + " ,今年" + this.age + " ,在" + school + "上" + grade);                
            }
        }
        var xh = {
            name : "小红",
            gender : "女",
            age : 18
        }

say メソッドにはさらに 2 つのパラメーターがあることがわかります。call/apply のパラメーターを介してパラメーターを渡します。
これは通話の場合です

1.xw.say.call(xh,"実験小学校","6年生");

適用すると次のようになります

1.xw.say.apply(xh,["実験小学校","6 年生"]);

呼び出し後のパラメータは Say メソッドと 1 対 1 に対応しますが、apply の 2 番目のパラメータは配列と 1 対 1 に対応します。これが両者の最大の違いです。

では、バインドはどのようにパラメータを渡すのでしょうか? call のようにパラメータを渡すことができます。

1.xw.say.bind(xh,"実験小学校","6年生")();

しかし、bind は依然として関数を返すため、呼び出し時にパラメータを渡すこともできます。

1.xw.say.bind(xh)("実験小学校","6 年生");

上記の JavaScript での apply、call、bind の使用方法の違いはすべてエディターによって共有されている内容ですので、参考にしていただければ幸いです。また、Script Home をサポートしていただければ幸いです。

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