`
zccst
  • 浏览: 3319192 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jquery.proxy的四种使用场景及疑问

阅读更多
作者:zccst

其实只有两种使用方式,只不过每一种又细分是否传参。

先给一段HTML,后面会用来测试:

<p><button id="test">Test</button></p>
<p id="log"></p>




1,jQuery.proxy(function, context);

使用context作为function运行上下文(即this)

2,jQuery.proxy(function, context [, additionalArguments]);

传递参数给function

使用场景:click时,执行function,在给定的context里,同时传递两个参数,如果需要event,则可以作为function第三个参数。

注意:function执行的环境如果不适用proxy,则context会是当前点击对象,现在指定了其他的上下文,已经跟当前点击对象没有一点关系了。
 var me = {
   /* I'm a dog */
   type: "dog",
   
   /* Note that event comes *after* one and two */
   test: function(one, two, event) {
     $("#log")
       /* `one` 是第一个附加参数,与对象`you`对应 */
       .append( "<h3>Hello " + one.type + ":</h3>" )
       /* `two` 是第二个附加参数,与对象`they`对应 */
       .append( "and they are " + two.type + ".<br>" )
       /* `this` 是上下文,与普通对象`me`对应 */
       .append( "I am a " + this.type + ", " )
  
       
       /* 事件类型是点击"click" */
       .append( "Thanks for " + event.type + "ing " )
       /* `event.target`是被点击元素,类型是按钮button */
       .append( "the " + event.target.type + "." );
   }
 };
  
 var you  = { type: "cat" };
 var they = { type: "fish" };
  
 
 /* 一共4个参数:第一个是function,第二个是context,第三、四是参数 */
 var proxy = $.proxy( me.test, me, you, they );
 
 $("#test").on( "click", proxy );
 /* 运行结果:
 Hello cat:
 and they are fish.
 I am a dog, Thanks for clicking the submit.
 */

在这种情况下,click仅仅相当于一个触发按钮,触发后执行的函数,跟click一点关系都没有了。





3,jQuery.proxy(context, name);

使用场景:context是一个PlainObject,name是其方法。在click时执行,但test函数执行的上下文是obj,不是$("#test")
 var obj = {
     name: "John",
     test: function() {
         console.log(this);
         $("#log").append( this.name );
         $("#test").off("click", obj.test);
     }
 };
 $("#test").on( "click", jQuery.proxy( obj, "test" ) );//在click时执行,但又
不是click的上下文


结果分析:在绑定点击事件后,第一次执行时,就把该绑定去除了。

去除之后,button上已经没有点击事件,所以再点击按钮,也不会有任何反应了。



4,jQuery.proxy(context, name [, additionalArguments]);





一个疑问:

请教大家一个问题,
jQuery.proxy(context, function, params);

function.call(context,params);
区别是什么?
我遇到一个问题是用proxy没反应,用call时就有反应。


如果您觉得本文的内容对您的学习有所帮助,您可以微信:
分享到:
评论

相关推荐

    UPX_net.upx.proxy.browser_102_69.0.3497.100_.apk

    UPX_net.upx.proxy.browser_102_69.0.3497.100_.apk

    java.lang.reflect.Proxy 学习资料 讲解 例子 源码

    java.lang.reflect.Proxy 学习资料 讲解 例子 源码 java.lang.reflect.Proxy 学习资料 讲解 例子 源码 java.lang.reflect.Proxy 学习资料 讲解 例子 源码

    proxy.jsp、proxy.ashx、proxy.php、proxy.config

    在给定的标题和描述中,"proxy.jsp、proxy.ashx、proxy.php、proxy.config"是指四种常见的代理服务实现,分别对应Java、ASP.NET和PHP等不同平台。这些文件通常用于配置和运行Esri的代理服务。 **proxy.jsp** 是一个...

    实例解析jQuery中proxy()函数的用法_.docx

    为了修复这个问题,我们可以使用`jQuery.proxy()`: ```javascript // 使用 jQuery.proxy() 修复 this $('#Haorooms').click(function() { setTimeout($.proxy(function() { $(this).addClass('aNewClass'); }, ...

    Mentalis.org.proxy开源

    Mentalis.org.proxy开源的c#,以及我的一个应用实例。

    最新 jQuery 1.7正式发布(附带1.6中文API)

    以及jQuery.isNaN()和jQuery.event.proxy()方法,分别用event.originalEvent.layerX and event.originalEvent.layerY、jQuery.isNumeric()、jQuery.proxy进行替换。 jQuery1.6中文API不是CHM格式的!

    jquery.1.6.2.sdocml&jquery.1.4.2.sdocml

    《jQuery 1.4.2 和 1.6.2 的源码解析及代码提示功能在 Aptana 中的应用》 jQuery 是一个广泛使用的JavaScript库,它极大地简化了JavaScript的DOM操作、事件处理、动画设计以及AJAX交互。在这个文档中,我们将深入...

    ArcGIS JS API跨域配置 Proxy 代理

    ArcGIS JS API 跨域配置是指在 JS 开发中遇到的访问本地服务和外网服务的问题,需要使用 Proxy 代理来解决跨域访问文件的问题。ArcGIS 的帮助中已经有了相关的介绍和使用配置。 一、使用代理配置 在 ArcGIS JS API...

    实例解析jQuery中proxy()函数的用法

    jQuery.proxy(),接受一个函数,然后返回一个新函数,并且这个新函数始终保持了特定的上下文(context )语境。 jQuery.proxy( function, context ) function将要改变上下文语境的函数。 context函数的上下文语境(`...

    arcgis proxy.ashx,proxy.config

    arcgis for javascript api所需要的配置文件,能解决跨域访问的问题,我在proxy....包含两个文件proxy.ashx,proxy.config两个文件,上次下载一个说是有两个文件,其实里面只有一个,有被骗了的感觉,所以这次上传上来

    jquery1.4.js + jquery-validation.min.js

    3. **$.each()增强**:现在可以对非数组对象进行迭代,这极大地扩展了$.each()的使用场景。 4. **CSS选择器支持**:增加了对CSS3选择器的支持,如:nth-child()、:not()等,使得选择元素更加精确便捷。 二、jQuery ...

    proxy.config

    proxy.config,proxy.ashx这两个文件是配套使用的,缺一不可,这里需要设置的是proxy.config,所以只上传了改动过的proxy.config,原始的这两个文件可以上网去查找。 同时代码中要加入: esri.config.defaults.io....

    java.lang.NoSuchMethodException: com.sun.proxy.$Proxy58.list错误解决办法

    在这个特定的问题中,错误提示是`java.lang.NoSuchMethodException: com.sun.proxy.$Proxy58.list()`,这意味着在`com.sun.proxy.$Proxy58`这个动态生成的代理类中找不到名为`list`的方法。 首先,我们需要理解`...

    jQuery 1.9.1源码分析系列(十四)之常用jQuery工具

    在上下文控制方面,jQuery.proxy()函数可以改变一个函数的执行上下文(this指向)。它有两种用法,一种是直接指定函数和上下文,另一种是通过上下文中的函数名来指定函数和上下文。这在需要改变回调函数this指向的...

    jquery-1.7.0

    1、新的事件: .on() and .off() 2、提升了事件委派时的性能,下图(图片来自官网)是1.6.4和1.7版本的比较,可见在事件委派方面性能提升了一半,而且Chrome性能最好 5、匿名模块定义 AWD ...3、jQuery.event.proxy()

    PyPI 官网下载 | zope.proxy-4.1.4-py3.2-win32.egg

    `zope.proxy`是一个Python库,它提供了一种透明的代理对象机制。透明意味着使用代理对象与直接操作原始对象几乎无异,但这个库的目的是为了增加一些额外的功能或者安全特性。代理对象允许我们在不修改原有代码的情况...

    救活HiSuite Proxy的方法.docx

    - HiSuite Proxy是一种允许用户通过代理服务器来操作手机固件的工具,主要用于降级等场景。 - 正常情况下,用户通过HiSuite连接手机后,可以从华为的官方服务器下载相应的固件进行安装或更新。 - 当华为更改固件...

    Python库 | zope.proxy-4.1.6.win32-py3.2.exe

    Python是一种广泛使用的高级编程语言,尤其在Web开发、数据分析、人工智能等领域有着重要应用。在Python的生态系统中,存在大量的第三方库来扩展其功能,"zope.proxy"就是其中之一。这个库是专门为Python设计的一个...

    Linux.Firewall.And.Proxy.Server.-.Howto

    Linux.Firewall.And.Proxy.Server.-.Howto

    Microsoft.Bluetooth.Proxy.dll

    Microsoft.Bluetooth.Proxy

Global site tag (gtag.js) - Google Analytics