问一下proxy

问一下proxy

$.proxy接受一个已有的函数,并返回一个带特定上下文的新的函数。

http://img1.sycdn.imooc.com//climg/5e97cd1c09a30b8615620170.jpg

这样理解对吗:原来没用proxy的时候this指向dom ,用了proxy之后的意思是指 将会自动找到带有show函数的this指向 并替换不带函数的this指向使其的指向正确

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕粉 2020-04-16 18:56:22

同学你好,简单的来说就是改变了this的指向,我们可以举个例子看下:

在某些情况下,我们调用JS函数时候,this指针并不一定是我们所期望的那个,例如:

$('#myElement').click(function() {
    setTimeout(function() { // 这个this指向的是settimeout函数内部,而非之前的html元素
        $(this).addClass('aNewClass');
    }, 1000);
});

通常的一种做法是这样的是在外面声明一个变量, 保存this指向

$('#myElement').click(function() { 
   var that = this;//用that变量把this储存起来
    setTimeout(function() {
        $(that).addClass('aNewClass');
    }, 1000);
});

在使用jquery框架的情况下, 有一种更好的方式是使用$.proxy函数,$.proxy()接受一个函数,然后返回一个新函数,并且这个新函数始终保持了特定的上下文(context )语境。

此时就可以将1中的例子可以修改成:

$('#myElement').click(function() {
    setTimeout($.proxy(function() {
        $(this).addClass('aNewClass');  
    }, this), 1000);
});

同学再理解下。

祝学习愉快~

好帮手慕粉 2020-04-16 15:22:53

同学你好,理解的是有问题的。这里的两个this都是指向Dropdown函数实例化对象。

因为hover事件中的this指向触发事件的元素,也就是this.$elem,而show和hide方法是在Dropdown函数上的,元素上并没有,所以需要使用$.proxy 方法改变修改this的指向, $.proxy接受一个已有的函数,并返回一个带特定上下文的新的函数。将this指向Dropdown函数,而不是执行hover事件的元素this.$elem。

同学再理解下。

祝学习愉快~

  • 提问者 陈立天 #1
    并返回一个带特定上下文的新的函数 是什么意思
    2020-04-16 16:12:50
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师