Raf*_*ele 16 javascript jquery
在这个提交中,有一个我无法解释的变化
deferred.done.apply( deferred, arguments ).fail.apply( deferred, arguments );
Run Code Online (Sandbox Code Playgroud)
变
deferred.done( arguments ).fail( arguments );
Run Code Online (Sandbox Code Playgroud)
据我所知,当你调用一个函数作为某些对象的成员一样obj.func(),里面的功能this势必会obj,所以就没有使用通过调用函数apply()只是为了绑定this到obj.相反,根据评论,这是必要的,因为前面的一些$.Callbacks.add实现.
我怀疑是不是jQuery的,但关于JavaScript语言本身:当你调用一个函数一样obj.func(),怎么能是这里面func()的this关键词不绑定到obj?
虽然其他答案涉及您关于this关键字的问题,但他们没有回答您apply使用原因的问题.这是踢球者:在该示例中apply没有用于设置this关键字.相反,它被用来arguments作为done和fail函数的参数传递.
举个例子:
var x = {
a: function(a1, a2, a3) {
console.log(a1, a2, a3);
}
}
function callA() {
x.a.apply(x, arguments);
x.a(arguments);
}
callA('red', 'blue', 'green');
Run Code Online (Sandbox Code Playgroud)
如果执行此代码,你应该看到的区别x.a.apply(x, arguments);和x.a(arguments);.在第一个a1,a2和a3是各自的颜色"红","蓝"和"绿".在第二个,a1是阵列状物体[ "red", "blue", "green" ]和a2和a3是undefined.
同样,在您发布的示例中,apply正在用于arguments正确传递对象,而不是设置this关键字.
我的疑问不是关于jQuery,而是关于Javascript语言本身:当你调用像obj.func()这样的函数时,如何在func()里面将this关键字绑定到obj?
嗯,这是可能的唯一方法是如果obj.func引用一个bound函数,那么你如何调用它并不重要.在这种情况下,它不会不管你如何调用该函数,不管你做的obj.func(),func(),func.call({}),func.apply({})无所谓的.但是,我不确定提交是如何与此相关的.
为了澄清,我正在回答引用的问题解释为:
给定一个调用签名,如:obj.func(),怎么可能说this是不是 obj呼叫被调用的函数里面?
| 归档时间: |
|
| 查看次数: |
606 次 |
| 最近记录: |