jquery 代理
jQuery 代理(Proxy)方法
jQuery 中的代理(Proxy)通常指通过 $.proxy() 方法或 Function.prototype.bind() 来改变函数执行时的上下文(this 值)。以下是具体实现方式和应用场景:
使用 $.proxy() 方法
$.proxy() 是 jQuery 提供的函数,用于绑定函数的上下文和参数。语法如下:
$.proxy(function, context[, additionalArguments])
示例:绑定事件处理函数的上下文
var obj = {
name: "Object",
handler: function(event) {
console.log(this.name); // 输出 "Object"
}
};
$("#btn").click($.proxy(obj.handler, obj));
使用 Function.prototype.bind()
ES5 原生支持的 bind() 方法功能与 $.proxy() 类似,但更推荐使用原生方法:

$("#btn").click(obj.handler.bind(obj));
代理的应用场景
- 事件绑定:确保回调函数中的
this指向特定对象。 - 延迟执行(如
setTimeout):setTimeout($.proxy(obj.method, obj), 1000); - 传递预置参数:
$.proxy(function(a, b) { console.log(a, b); // 输出 "pre", "set" }, null, "pre")("set");
注意事项
- jQuery 3.0 已弃用
$.proxy(),建议使用原生bind()。 - 箭头函数(
=>)会继承外层this,无需代理。
替代方案(ES6+)
// 箭头函数
$("#btn").click(() => obj.handler());
// bind()
$("#btn").click(obj.handler.bind(obj));
通过代理方法,可以灵活控制函数执行时的上下文,适用于事件处理、异步回调等场景。






