有时候我会看到人们使用它来调用小部件中的函数
this.myFunction.apply(this, arguments);
而不是:
this.myFunction();
What's the .apply jQuery function?
somefunction.apply(thisobj, argsarray)
上面调用函数somefunction,在函数范围内将其设置为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!");
}
答案 0 :(得分:8)
apply
方法只允许您指定函数的上下文,它还允许您将参数作为数组提供。来自fine manual:
调用具有给定
this
值的函数,并将arguments
作为数组提供。
作为数组提供的 arguments
非常重要。调用函数的当前参数在array-like arguments
object中可用,实际参数与函数的签名无关;例如,f = function() {...}
可以被称为f(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);
就好像我们这样做了:
{{1}}
答案 1 :(得分:3)
这不是jQuery,而是JavaScript。 .apply()
和.call()
允许您更改this
在函数内的含义。