关于$.proxy()还是不太理解

关于$.proxy()还是不太理解

mode.init($elem)
  return {
    // show:mode.show,
    show:$.proxy(mode.show,this,$elem),
    // hide:mode.hide,
    hide:$.proxy(mode.hide,this,$elem)
   };


网上看了一些,没太看懂,网上是这样写的。

jQuery.proxy( function, context )

/**function将要改变上下文语境的函数。

** context函数的上下文语境(`this`)会被设置成这个 object 对象。

**/

jQuery.proxy( context, name )

/**context函数的上下文语境会被设置成这个 object 对象。

**name将要改变上下文语境的函数名(这个函数必须是前一个参数 ‘context' **对象的属性)

**/

   

正在回答

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

2回答

同学你好,你的理解还是可以的。

如果没有使用$.proxy()方法,直接调用方法,如下:

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

那么hover方法中的this指向的就是this.$elem元素,也就是同学说的下拉菜单按钮,但是这两个方法是构造函数中的,并不是元素上的,所以需要改变this的指向。

那么$.proxy()方法中第一个参数是调用已有的函数,第二个参数是函数所在对象的名称,那么使用this,也就是当前上下文中的this:

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

指向的就是实例化后的Dropdown对象。

祝学习愉快!

好帮手慕星星 2019-04-17 15:39:41

同学你好,可以简单理解为改变this的指向,但是这里和this指向没有关系,只是用来传参数的,将$elem元素传入方法中:

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

在后面的课程中:

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

也用到这个$.proxy()方法:

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

在这可以先了解一下,在hover事件中使用了this,那么this就会执行绑定事件的元素this.$elem,但是触发的元素中没有show方法,show方法是Dropdown函数中的,所以需要使用$.proxy()方法,将this指向上下文,也就是实例化后的对象Dropdown。到后面可以再深入学习一下。

祝学习愉快!

  • 提问者 见信 #1
    老师,视频我已经看到这一个章节了,这里的,this.$elem指的是下拉菜单按钮,$.proxy(this.show,this)中的this.show指的是构造函数的show方法,那么里面的this是指构造函数还是下拉菜单按钮?对于$.proxy()这个方法我还是很不理解,尤其是传递什么上下文之类的,现在我的初步理解就是:$.proxy(this.show,this)这个方法用来调用了一个别的对象的方法,this.show指的是别的对象被调用的函数,所以这里的this是指向构造函数对象。那意思,$.proxy()的第一个参数是调用什么函数,第二个参数是这个要调用的函数的位置?
    2019-04-20 16:45:39
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
组件化思想开发电商网页 18版
  • 参与学习           人
  • 提交作业       467    份
  • 解答问题       4826    个

本路径带你通过系统学习HTML5、JavaScript、jQuery的进阶知识,不仅如此,还会学习如何利用组件化的思想来开发网页,知识点+案例,使得所学可以更好的得到实践。

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

在线咨询

领取优惠

免费试听

领取大纲

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