应用jquery小部件(this,arguments)

时间:2012-04-29 06:58:12

标签: javascript jquery jquery-widgets

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

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!");
    }

2 个答案:

答案 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在函数内的含义。