jQuery的proxy函数有什么用?

在js开发中,this就类似于c语言的指针,理解不了这个,根本无法编程。那么有些场景,this也会给我们带来困扰,有如下场景:

1. setTimeout、setInterval,注意只有在类的方法下面调用才会有问题。
2. ajax调用,正是如此,extjs里才提供了scope属性来解决这个问题。
3. 事件绑定的时候,this默认为dom对象或者是事件的publisher。

如上三个是常见的用法,不排除其他场景也有此问题。

jQuery的proxy函数有什么用?

第一种比较原始的办法可能是这样: function Person() { this.name = "xiaomeiti"; } Person.prototype.execute = function() { setTimeout(function() { alert(this.name); //注意此时this.name是不会按照预期打印出来的 }, 1000); var me = this; setTimeout(function() { alert(me.name); //注意此时this.name是可以按照预期打印出来的 }, 1000); }; 但如上的方案未免有点不太优雅,到处的me定义,加上函数里本身的this,会更加混乱。 于是jQuery里提供了proxy函数可以解决这个问题,比如上面代码这么写即可: setTimeout($.proxy(function() { alert(me.name); //注意此时this.name是可以按照预期打印出来的 }, this), 1000);

事件绑定,ajax调用都是一样的。官方proxy函数描述: http://api.jquery.com/jQuery.proxy/

相关阅读