作者: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时就有反应。

jquery.proxy的四种使用场景及疑问的更多相关文章

  1. web手工项目03-登录功能测试用例及缺陷编写-流程图画法-前后台下单及发货流程图-流程图设计测试用例方法-功能测试涉及到的四种数据库场景

    回顾 注册功能测试(步骤,需求分析(输入分析,处理分析,输出分析),数据构造(有效等价类,无效等价类,有效数据,无效数据),编写用例,执行用例,缺陷报告) 轮播图功能测试(步骤,需求分析拆分测试点,测 ...

  2. [Unity-24] Unity的四种载入场景的方法

    Unity官方提供了4种载入场景(scene)的方法.各自是: 1. Application.LoadLevel():同步载入 2. Application.LoadLevelAsync():异步载入 ...

  3. Java代理设计模式(Proxy)的四种具体实现:静态代理和动态代理

    面试问题:Java里的代理设计模式(Proxy Design Pattern)一共有几种实现方式?这个题目很像孔乙己问"茴香豆的茴字有哪几种写法?" 所谓代理模式,是指客户端(Cl ...

  4. MyBatis 中 @Param 注解的四种使用场景,最后一种经常被人忽略!

    有一些小伙伴觉得 MyBatis 只有方法中存在多个参数的时候,才需要添加 @Param 注解,其实这个理解是不准确的.即使 MyBatis 方法只有一个参数,也可能会用到 @Param 注解. 但是 ...

  5. jQuery 事件绑定四种方式,delegate委托强大绑定在3.0中修改为on

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. MyBatis 中 @Param 注解的四种使用场景

    https://juejin.im/post/6844903894997270536 第一种:方法有多个参数,需要 @Param 注解 第二种:方法参数要取别名,需要 @Param 注解 第三种:XM ...

  7. boost::bind四种应用场景的例子

        普通函数 int f( int a, int b ){return a + b;}boost::bind( f, _1, 9 )( 1 ) 成员函数 struct demo{int f( in ...

  8. jQuery中四种事件监听的区别

    原文链接:点我 我们知道jquery提供了四种事件监听方式,分别是bind.live.delegate.on,下面就分别对这四种事件监听方式分析. 已知有4个列表元素: 列表元素1 列表元素2 列表元 ...

  9. “茴”字有四种写法,this也是一样

    说到这个地方又想起以前高中还是初中学的<孔乙己>这个梗,但是这里的this显然实用性比那个要大很多,哈哈. 简单来说,this有四种应用场景,分别是在构造函数上.对象属性中.普通函数中.c ...

随机推荐

  1. PS:抠图方法1(利用对比度ctrl+l)

    PS:抠图方法1(利用对比度ctrl+l) 工具/原料   Photoshop.美女照片 方法/步骤     小编使用的是Photoshop cs5版本,大家使用其他版本都没有关系,界面略有不同,但操 ...

  2. Java 反射实例

    实体类:Userpackage com.reflect.model; public class User{ private User(int id, String username, String p ...

  3. redis 进阶

    1.一定要设置最大缓存大小并设置缓存策略 如果不设置最大缓存,在新添加数据时,如果超过最大内存回事redis崩溃! 设置方式:maxmemory 1GB 使用redis-cli登录后,使用info命令 ...

  4. java.sql.ResultSet技术(从数据库查询出的结果集里取列值)

    里面有一个方法可以在查询的结果集里取出列值,同理,存储过程执行之后返回的结果集也是可以取到的. 如图: 然后再运用 java.util.Hashtable 技术.把取到的值放入(K,V)的V键值里,K ...

  5. jsp提交表单问题

    以form形式提交的话 String usernameInForm = hreq.getParameter("username");String passwordInForm = ...

  6. POJ1734/Floyd求最小环

    Sightseeing trip Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6647   Accepted: 2538 ...

  7. Javascrpit学习之路一——基础知识

    1.DOM 文档对象模型 定义:一个与系统平台和编程语言无关的接口,程序和脚本可以通过这个接口动态的访问和修改文档的内容.结构和样式. 2.Javascript 区分大小写.弱类型语言 变量小写:va ...

  8. 初识Selenium(一)

    Selenium入门相关PPT参考网址:http://wenku.baidu.com/view/d1e7d90390c69ec3d5bb7565.html?from=search 内容引用网址:htt ...

  9. java 对象的组合,一个类组合到另一个类中(例如手机卡装到手机上)

    Example4_9.java public class Example4_9 { public static void main(String args[]) { SIM simOne = new ...

  10. html5 之本地数据存储

    HTML5 提供了两种在客户端存储数据的新方法: localStorage - 没有时间限制的数据存储 sessionStorage - 针对一个 session 的数据存储 cookie与webSt ...