关于 $.proxy(fn,context,arg) 方法
<!-- $.proxy(fn,this,agrument);
proxy 代理 思考做酒的代理商
argument就是代理商 把fn所在的作用域对象的参数/属性 代理给fn执行。
fn: 要被调用的已有的函数。 this: fn函数所在的对象的名称。 就是 fn在哪里调用,this 就是指向那个作用域中的对象。
说白了就是:fn 函数在哪个作用被调用,this就是指向谁。 arg: 把fn函数所在的对象 this 的参数 传递给fn执行。
arg 一定是 fn函数所在的对象this 里面的任何参数皆可。
-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div id="panel" style="display:none;">
<button class="close">消失</button>
</div>
<script src="js/jquery.js"></script>
<script>
/*$("#panel").fadeIn(3000,function () {
$('.close').click(function () {
$(this).fadeOut(); // 其实这里我想让 #panel 隐藏来着
console.log($(this));
});
});
$('#panel').click(function() {
setTimeout(function() {
$(this).addClass('aNewClass'); // 这个 this 根本就不对嘛
console.log($(this));
}, 1000);
});*/ $("#panel").fadeIn(function(){
console.log(this);//指向 $('$panel')对象
$('.close').click($.proxy(HidePanel, this));
// 相比这个 $('.close').click(function(){HidePanel()}); 优美很多
}); function HidePanel() {
//如果HidePanel这个函数单独调用,那么这里的this指向window
//$(this).fadeOut(); 而这句话就会报错,因为window是无法执行fadeOut动画的。
//这里不能单独执行,如果没有$(this).fadeOut();这句代码,那就可以执行。
//该函数在哪个作用域中执行,这个this就指向谁。
console.log(this);
$(this).fadeOut();
} $('#panel').click(function() {
setTimeout(
$.proxy(
function(e) {
$(this).addClass('aNewClass');
for (var p in e) {
console.log(e);
}
},
this,
'woaini'),
1000);
}); //单独执行函数HidePanel 会报错,函数中的this指向window,而window是无法执行fadeOut动画的
// HidePanel();
</script>
</body>
</html>
====================
$(selector).proxy(context,name)
function 要被调用的已有的函数。
name 已有的函数,其上下文将被改变(应该是 context 对象的属性)。
就是:不再执行整个function函数了,而是直接执行context。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js">
</script>
<script>
$(document).ready(function(){
var objPerson = {
name: "John Doe",
age: 32,
test: function(){
$("p").after("Name: " + this.name + "<br> Age: " + this.age);
}
};
$("button").click($.proxy(objPerson,"test"));
});
</script>
</head>
<body> <button>执行 test 函数</button>
<p></p> </body>
</html>
============
语法:$(selector).proxy(function,context)
function 要被调用的已有的函数。
context 函数所在的对象的名称。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js">
</script>
<script>
$(document).ready(function(){
test=function()
{
this.txt="这是一个对象属性";
$("div").click($.proxy(this.myClick,this));
}; test.prototype.myClick = function(event)
{
alert(this.txt);
alert(event.currentTarget.nodeName);
}; var x = new test();
});
</script>
</head>
<body> <div>这是一个 div 元素。</div> </body>
</html>
关于 $.proxy(fn,context,arg) 方法的更多相关文章
- c# AOP编程:Context与方法拦截
之前做AgentBooking时候,遇到两个问题比较棘手,一个是异常的传递与捕获:如何可以合理地在层层代码调用中统一传递并统一捕获异常.因为如果有一个做法,可以地方统一处理异常,可以使代码减少很多tr ...
- jQuery.proxy(function,context)
jQuery.proxy(function,context) 概述 jQuery 1.4 新增.返回一个新函数,并且这个函数始终保持了特定的作用域.大理石平台检定规程 当有事件处理函数要附加到元素上, ...
- 实战CGLib系列之proxy篇(一):方法拦截MethodInterceptor
实战CGLib系列文章 本篇介绍通过MethodInterceptor和Enhancer实现一个动态代理. 一.首先说一下JDK中的动态代理: JDK中的动态代理是通过反射类Proxy以及Invoca ...
- Android 缓存目录 Context.getExternalFilesDir()和Context.getExternalCacheDir()方法
一.基础知识 应用程序在运行的过程中如果需要向手机上保存数据,一般是把数据保存在SDcard中的.大部分应用是直接在SDCard的根目录下创建一个文件夹,然后把数据保存在该文件夹中.这样当该应用被卸载 ...
- Android获取全局Context的方法
Android获取全局Context的方法 Android--应用全局获取Context - 超宇的博客 - CSDN博客https://blog.csdn.net/chaoyu168/article ...
- 【转】Context.getExternalFilesDir()和Context.getExternalCacheDir()方法
应用程序在运行的过程中如果需要向手机上保存数据,一般是把数据保存在SDcard中的.大部分应用是直接在SDCard的根目录下创建一个文件夹,然后把数据保存在该文件夹中.这样当该应用被卸载后,这些数据还 ...
- QT学习之QString的arg方法
在QT的QString中,arg方法类似于C中的printf中使用的格式输出符(只是有点类似). 在QT5的帮助文档中,可以看出以下几点: 使用arg(str1, str2, str3)这种方法进行替 ...
- QT之QString的arg方法
转载.标记一下,总结的很好 转自 http://www.cnblogs.com/lomper/p/4135387.html 在QT的QString中,arg方法类似于C中的printf中使用的格式输出 ...
- Qt QString的arg()方法的使用
1.QString的arg()方法用于填充字符串中的%1,%2...为给定的参数,如 QString m = tr("); // m = "12:60:60: 2.它还有另外一种重 ...
随机推荐
- Springmvc在项目启动时查询数据库并初始化静态变量
private static List<ResourceEntity> resourceList = null; //初始化的全局静态变量 @Autowired private Resou ...
- 1181: 零起点学算法88——偶数求和(C语言)
一.题目: 题目来源WUSTOJ 二.源代码: #include<stdio.h> int main() { int n, m, num, sum, i, j, k; while (sca ...
- Missing android.support.FILE_PROVIDER_PATHS meta-data 报错原因分析
此类错误多半因为拼写错误导致.有StackOverflow上便有网友将"FILE_PROVIDER_PATHS"误写成"FILE_PROVIDE_PATHS"的 ...
- webpack css文件编译、自动添加前缀、剥离
1.css文件编译 webpack默认只能编译js文件,引入css需要loader支持 // css文件写入js中 npm i style-loader -D // css文件loader npm i ...
- 使用其他身份运行计算机(DOS命令)
runas/user:administrator cmd d: cd esop sfispri.ini
- 炫酷的可视化工具包——cufflinks
前言 学过Python数据分析的朋友都知道,在可视化的工具中,有很多优秀的三方库,比如matplotlib,seaborn,plotly,Boken,pyecharts等等.这些可视化库都有自己的特点 ...
- 【转载】C#使用Split函数根据特定分隔符分割字符串
在C#程序开发过程中,很多时候可能需要将字符串根据特定的分割字符分割成字符或者List集合,例如根据逗号将字符串分割为数组,或者根据竖线将字符串分割成数组,C#中提供了Split()函数来快速将字符串 ...
- JS权威指南读书笔记(三)
第七章 数组 1 数组的实现是经过优化的,用数字索引来访问数组元素一般来说比访问常规的对象属性要快的多. 2 数组直接量的语法允许有可选的结尾的逗号,故[ ; ; ]只有两个元素而非三个. 3 调用构 ...
- 远程 Linux(Ubuntu 18)添加字体
安装 xshell与xftp 连接xshell 点击 xshell上方工具栏中的xftp图标, 自动连接xftp linux下创建字体目录 su cd / cd usr/share/fonts mkd ...
- ES6中 对字符串增强
在曾经,我们只能用A.indexof(B)来判断A中是否含有B字符串: 现在在ES6中 有了: includes(), startswith(),endswith() reapt()重复次数: 输出 ...