1

这里有两种设置上下文的方法:

$.proxy(function() { 
  this.doStuff();
}, this);

...

var that = this;
that.doStuff(); 

有什么理由使用一个而不是另一个?

4

2 回答 2

0

我更喜欢使用绑定。

this.ans = 42;
this.fun = function() { alert(this.ans) };
var binded_fun = this.fun.bind(this);
binded_fun() // 42

您也可以使用 bind 进行 сurrying,例如:

var sum = function(a, b) { return a + b };
var add5 = sum.bind(this, 5);
alert(add5(3)) // 8

现代浏览器中存在“绑定”功能,本机代码也是如此,并且比 jQuery.proxy http://jsperf.com/bind-vs-jquery-proxy更快

在旧浏览器中,您可以实现它https://developer.mozilla.org/ru/docs/JavaScript/Reference/Global_Objects/Function/bind

于 2013-01-14T16:50:40.637 回答
0

第二种方法是纯 JavaScript。

第一个依赖于框架(在您的情况下为 jQuery)。

没有人比其他人更好。

我更喜欢第二个,它是免费的。

于 2013-01-14T16:34:00.283 回答