3

これを使用してウィジェット内の関数を呼び出す人を時々見かけます

this.myFunction.apply(this, arguments);

これの代わりに:

this.myFunction();

.apply jQuery 関数とは何ですか?

somefunction.apply(thisobj, argsarray)

上記は関数 somefunction を呼び出し、これを関数のスコープ内で thisobj に設定し、引数として argsarray からの引数を関数に渡します。

しかし、以下の場合を考えると、関数を直接呼び出しても .apply() を使用しても同じではないでしょうか? jQuery サイト自体を含め、代わりに .apply() メソッドを好むいくつかのチュートリアルを見てきました。http://jqueryui.com/demos/widget/

これはウィジェットの「標準」ですか、それとも他に欠けているものがありますか?

_create: function() {
            var that = this;
            this.myButton = $( "<button>", {
                text: "My Button"
            })
            .appendTo( this.element )
            .bind("click", function() {
                // _bind would handle this check
                if (that.options.disabled) {
                    return;
                }
                that.displayMessage.apply(that, arguments);
                // Why not just call the following?
                // that.displayMessage();
            });
        },
displayMessage: function() {
        alert("Hey!");
    }
4

2 に答える 2

8

このapplyメソッドは、関数のコンテキストを指定できるようにするだけでなく、引数を配列として指定することもできます。細かいマニュアルから:

this指定された値で関数を呼び出し、arguments配列として提供されます。

arguments配列として提供されることが重要です。関数が呼び出された現在の引数は配列のようなargumentsオブジェクトで使用可能であり、実際の引数は関数のシグネチャとは無関係です。たとえば、f = function() {...}として呼び出すことができ、必要に応じてこれらの3つの値f(1,2,3)f引き出すことができますarguments

したがって、この:

that.displayMessage.apply(that, arguments);

呼び出されたパラメーターを知る(または気にする)必要 なしに、呼び出さthat.displayMessageれたのと同じ引数を使用して呼び出します。これにより、関数は、場合によっては異なる数のパラメーターをいじくり回すことなく、呼び出しチェーンの途中でスリップすることができます。これは、単に呼び出すのとはまったく異なります。_create_createthat.displayMessage()

がこのように呼び出された場合_create

o._create('where is', 'pancakes house?');

その場合、apply呼び出しは次と同等です。

that.displayMessage('where is', 'pancakes house?');

ただし、異なるパラメータが使用された場合:

o._create(1, 2, 3);

次に、applyこれを行ったかのように動作します。

that.displayMessage(1, 2, 3);
于 2012-04-29T07:26:26.720 に答える
3

jQuery ではなく、JavaScript です。 関数内の意味.apply().call()変更できます。this

于 2012-04-29T07:08:42.440 に答える