作者: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. MySQL 视图 总结

    什么是视图 视图是从一个或多个表中导出来的表,是一种虚拟存在的表. 视图就像一个窗口,通过这个窗口可以看到系统专门提供的数据. 这样,用户可以不用看到整个数据库中的数据,而之关心对自己有用的数据. 数 ...

  2. HTML+CSS D08浮动

    1. <html> <head> <title>div浮动</title> <style type="text/css"> ...

  3. Linux学习 -- Shell编程 -- 流程控制

    if语句 单分支 if [ 条件判断式 ]; then 程序 fi 或者 if [ 条件判断式 ] then 程序 fi 例子: 双分支 if [ 条件判断式 ] then 程序 else 程序 fi ...

  4. ecshop后台增加模块菜单项详细教程(图文)

    有的时候我们会在后台增加新的功能,菜单项是一个程序的入口,是必不可少的,如何在后台增加菜单项呢,大家可以参考下面的教程:   例如:想在后台左侧的菜单栏的"促销管理"下添加一个&q ...

  5. ZF-关于海南的增删改需求

    ,) ,,) ,) '); select * from SYS_ORGAN where org_name = '区教体局' update sys_organ set org_name = '综合行政执 ...

  6. 详细版在虚拟机安装和使用hadoop分布式集群

    集群模式: 一台master 192.168.85.2 一台slave  192.168.85.3 jdk jdk1.8.0_74(版本不重要,看喜欢) hadoop版本 2.7.2(版本不重要,2. ...

  7. 配置snort

    0.如果要输出到mysql,请安装barnyard2 在此之前,请启动并配置mysql git clone https://github.com/firnsy/barnyard2 cd barnyar ...

  8. ZOJ3944People Counting<暴力/枚举>

    题意:输入一张照片,给出人物的特征,判断有多少个人. .O. /|\ (.) 思路:按照3*3的图统计,只要有一个点符合就加1 #include<cstdio> #include<i ...

  9. 关于数据结构的10个面试题(c语言实现)

    关于数据结构的10个面试题(c语言实现) 2010-04-21 22:17 5702人阅读 评论(0) 收藏 举报 数据结构面试c语言bttree 1.         输入一个链表的头结点,从尾到头 ...

  10. Robot Framework用法总结

    今天总结下Robot Framework最基本的用法,一来呢,希望自己以后看到这篇总结,很快能回忆起如何使用Robot Framework.二来呢,以初学者的姿态总结Robot Framework,希 ...