jQuery proxy详解
第一次接触jQuery.proxy()时感觉这个方法不实用,不明白它到底是个什么意思。今天来将jQuery官网上的解释进行一下翻译,顺便添加自己的理解和一些示例。proxy也可称为代理。
jQuery.proxy( function, context ) Returns: Function
通过这第一句话我们知道,jQuery.proxy传递的第一个参数是函数类型,第二个参数是上下文context,返回值也是一个函数。
JQuery API Document 上的描述是:
接受一个函数并且返回一个新的函数,这个函数总是包含着特定的上下文。
function:上下文将会被改变的函数
context:将函数的上下文设置到的一个新对象。注意:这里的上下文不是DOM对象,而是JS对象,并且要求context的类型是PlainObject(PlainObject是指包含一个或多个键值对的javascript对象,是jQuery对JS对象的一种定义,可以通过$.isPlainObject判断)。
看着这段说明似乎有点懵,例证一下
var parent = {
text: "parent"
, show: function () {
alert(this.text);
}
}
var child = {
text: "child"
, show: function () {
alert(this.text);
}
}
var show = $.proxy(parent.show, child);
show();
在这个例子中,我写了两个对象parent和child,同时调用了代理函数$.proxy,返回了show函数。调用了一下show函数,发现alert出来的是“child”。
这时候你会惊奇的发现,用法很像javascript中的call方法。
parent.show.call(child);
//alert结果是"child"
那么我们得出第一条结论:jQuery.proxy会将第一个参数function托管个context对象,并且返回一个新函数,这个新函数的执行上下文是传入的context参数
继续看
首先看以一下proxy的其它几种参数列表
jQuery.proxy( context, name )
name:String类型,就是函数的名字
将上述例子改写可以实现相同的效果
var show = $.proxy(child, 'show');
show();
这里是将show函数的执行上下文设置为child.
jQuery.proxy( function, context [, additionalArguments ] )
jQuery.proxy( context, name [, additionalArguments ] )
additionalArguments:给函数传入的参数
这种方式有些像带参数的call函数
var parent = {
text: "parent"
, show: function (pre) {
pre ? (pre += this.text) : pre = this.text;
alert(pre);
}
}
var child = {
text: "child"
, show: function (pre) {
pre ? (pre += this.text) : pre = this.text;
alert(pre);
}
}
var show = $.proxy(child, 'show', 'I am ');
show();
这种方法通常的使用场景是将事件处理函数附加到另一个新对象上去的时候,尽管返回的函数的执行上下文是新对象,但是可以通过原对象就可以解除新对象的函数绑定。
但是需要注意的是,jQuery事件绑定子系统会为每一个事件处理函数分配一个唯一的ID(在jQuery中是guid对象)用来跟踪它,这主要用来在特殊事件的解绑时使用。
即使事件绑定在不同的上下文对象上,通过jQuery.proxy返回的函数对jQuery来说也是唯一的。为了防止解绑事件初恋函数出错,最好使用唯一的命名空间来添加事件绑定函数和解除事件绑定函数(比如“click.Modal.data-api”,它会在事件绑定或解绑时,生成“data-api.Modal”的命名空间),而不需要在解绑时指定代理函数。
到jQuery1.6的时候,额外添加的函数会被传递到上下文对象改变的函数中。
到jQuery1.9的时候,当上下文对象context为null或者undefined的时候,被代理的函数也被称为这个代理的上下文对象context,这个时候jQuery.proxy的调用并没有改变传入函数的上下文对象了。
jQuery proxy详解的更多相关文章
- jQuery.validator 详解二
前言:上一篇详细的介绍了jQuery.validator( 版本v1.13.0 )的验证规则,这一篇重点讲述它的源码结构,及如何来对元素进行验证,错误消息提示的内部实现 一.插件结构(组织方式) 在讲 ...
- jQuery.validator 详解
jQuery.validator 详解二 前言:上一篇详细的介绍了jQuery.validator( 版本v1.13.0 )的验证规则,这一篇重点讲述它的源码结构,及如何来对元素进行验证,错误消息提示 ...
- jQuery:详解jQuery中的事件(二)
上一篇讲到jQuery中的事件,深入学习了加载DOM和事件绑定的相关知识,这篇主要深入讨论jQuery事件中的合成事件.事件冒泡和事件移除等内容. 接上篇jQuery:详解jQuery中的事件(一) ...
- jquery方法详解
jquery方法详解 http://www.365mini.com/doc
- Jquery 选择器 详解 js 判断字符串是否包含另外一个字符串
Jquery 选择器 详解 在线文档地址:http://tool.oschina.net/apidocs/apidoc?api=jquery 各种在线工具地址:http://www.ostools ...
- JQuery数组详解(含实例)
<!doctype html>jQuery数组处理详解(含实例演示)@Mr.Think 演示所用数组 var _mozi=['墨家','墨子','墨翟','兼爱非攻','尚同尚贤']; 1 ...
- [转载]JavaEE学习篇之——JQuery技术详解
原文链接:http://blog.csdn.net/jiangwei0910410003/article/details/32102187 1.简介2.工具3.jQuery对象 1.DOM对象转化成j ...
- jquery扩展函数详解(我的人生颠覆)
作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 上次分析了jquery的源码 ...
- JQuery动画详解(四)
一:基本动画show()显示隐藏的匹配元素.这个就是 'show( speed, [callback] )' 无动画的版本.如果选择的元素是可见的,这个方法将不会改变任何东西.无论这个元素是通过hid ...
随机推荐
- PHP扩展开发(3)-config.m4
1. 宏命令 1.1. dnl 注释 1.2. 扩展的工作方式 1.2.1) PHP_ARG_WITH不需要第三方库 1.2.2) PHP_ARG_E ...
- [UVALive] 6492 Welcome Party(最小点覆盖)
6492 Welcome Party For many summers, the Agile Crystal Mining company ran an internship program for ...
- 转:Qt 嵌入式开发环境搭建
地址: http://www.cnblogs.com/lishixian/articles/3013897.html 作者:lsx_007 这里主要是记录了自己在搭建嵌入式开发环境时阅 ...
- 主题模型-LDA浅析
(一)LDA作用 传统判断两个文档相似性的方法是通过查看两个文档共同出现的单词的多少,如TF-IDF等,这种方法没有考虑到文字背后的语义关联,可能在两个文档共同出现的单词很少甚至没有,但两个文档是相似 ...
- 请转到http://zhuangyongyao.com
个人博客搬迁到http://zhuangyongyao.com.
- WCF的执行过程
既然是实现互通信.那么肯定会有概念意义上的服务端Server 和概念意义上的客户端 Client,在这里,我所说明的都是概念意义上的,单独强调此,是因为,基于WCF的通信没有物理上的划分,但是概念上 ...
- VS2010安装与测试编译问题(fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt)
由于第三方库的各种原因,与编译冲突问题,公司又决定把整个项目都统一改用VS2010来编译.所以我把我开发机上的VS2008卸载了,又重新安装了VS2010.无奈出现了COFF格式转换问题.搜索了下.完 ...
- CONTEST45 呵呵呵呵呵
题目质量差评!为什么不给数据范围! A.乘积最大3 题目:http://dev.luogu.org/problem/show?pid=2172 题解:sb题,均值定理. 代码: #include< ...
- Java中一些常用的代码
总结一下最近程序中用到的代码吧,大部分不是自己写的,放到这里,备份一下,以后忘记了来看一下: //正则表达式验证手机号 public static void phoneTest(String phon ...
- spoj1812-Longest Common Substring II(后缀自动机)
Description A string is finite sequence of characters over a non-empty finite set Σ. In this problem ...