3

有时我看到人们使用它来调用小部件中的函数

this.myFunction.apply(this, arguments);

而不是这个:

this.myFunction();

.apply jQuery 函数是什么?

somefunction.apply(thisobj, argsarray)

上面调用了函数 somefunction,在函数范围内将 this 设置为 thisobj,并将 argsarray 中的参数作为参数传递给函数。

但是考虑到下面的情况,直接调用函数还是使用.apply()会不会一样?我已经看到一些教程更喜欢 .apply() 方法,包括 jQuery 站点本身。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() {...}可以调用 asf(1,2,3)并且f可以根据需要将这三个值从中提取出来arguments

所以这:

that.displayMessage.apply(that, arguments);

使用与调用that.displayMessage相同的参数_create 进行调用,而无需_create知道(或关心)调用它的参数;这允许函数在调用链的中间滑动,而不必处理可能不同数量的参数。这与调用that.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 回答