$.proxy() 的妙用

本文探讨了在JavaScript中使用$.proxy()方法修正函数执行时的上下文对象(this)的问题,通过实例展示了如何在事件处理和其他回调函数中正确引用DOM元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

$.proxy() 最主要就是用来修改函数执行时的上下文对象的。

先看以下情景:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

<div id="panel" style="display:none;">

    <button class="close">消失</button>

</div>

<script>

$("#panel").fadeIn(function () {

  $('.close').click(function () {

    $(this).fadeOut(); // 其实这里我想让 #panel 隐藏来着

  });

});

$('#panel').click(function() {

  setTimeout(function() {

    $(this).addClass('aNewClass'); // 这个 this 根本就不对嘛

  }, 1000);

});

</script>

打断一下...这里用 var $this = $(this); 来处理也可以呀。

妈蛋,还让不让我讲了啊喂。骚年郎,你是还没接触到 this 这门艺术的高深之处才会这样觉得,将 this 不去标量化才是我们装逼的价值。

不但少了个生成变量的性能输出,还避免了变量名耦合,最极致的莫过于提高了复用性...

看一眼改版后的代码

1

2

3

4

5

6

7

8

9

10

11

12

$("#panel").fadeIn(function(){

    $('.close').click($.proxy(HidePanel, this));

    // 相比这个 $('.close').click(function(){HidePanel()}); 优美很多

});

function HidePanel() {

    $(this).fadeOut();

}

$('#panel').click(function() {

  setTimeout($.proxy(function() {

    $(this).addClass('aNewClass');

  }, this), 1000);

});

  

上文说的是 $.proxy(fn, context) 用法,

而 $.proxy(context, name) 用法感觉更多的用在对象上,个人用的较少,因为感觉 new 一个对象函数要更爽(而 new 出来的 this 肯定不会乱了呀),不过还是列一下吧

1

2

3

4

5

6

var person = {

  name: "zyh",

  say: function(event) {alert(this.name)},

}

// $('#test').click(person.say) 显然有问题

$('.test').click($.proxy(person,'say'));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值