这里有两种设置上下文的方法:
$.proxy(function() {
this.doStuff();
}, this);
...
var that = this;
that.doStuff();
有什么理由使用一个而不是另一个?
这里有两种设置上下文的方法:
$.proxy(function() {
this.doStuff();
}, this);
...
var that = this;
that.doStuff();
有什么理由使用一个而不是另一个?
我更喜欢使用绑定。
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
第二种方法是纯 JavaScript。
第一个依赖于框架(在您的情况下为 jQuery)。
没有人比其他人更好。
我更喜欢第二个,它是免费的。