关于 $.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 补充
文章目录 数据回显 `@ModelAttribute` && `@SessionAttributes` 注解 数据回显 对 pojo 数据回显的支持 ,springMvc 会默认的将传 ...
- Git时间 —— 初始版本控制工具
<第一行代码>读书手札 可能你早就听闻git,奈何看不懂命令吓退了. 今天逆流而上. (1.)安装Git 登录官网,下载最新版,一路下一步.就完成安装了. (2.)创建本地代码仓库 首先配 ...
- C之多维指针讲解
转载自: http://c.biancheng.net/view/2016.html #include <stdio.h> #include <string.h> int m ...
- Spring Boot 集成 Swagger生成接口文档
目的: Swagger是什么 Swagger的优点 Swagger的使用 Swagger是什么 官网(https://swagger.io/) Swagger 是一个规范和完整的框架,用于生成.描述. ...
- hdu 2102 a计划问题。。 双层dfs问题
Problem Description 可怜的公主在一次次被魔王掳走一次次被骑士们救回来之后,而今,不幸的她再一次面临生命的考验.魔王已经发出消息说将在T时刻吃掉公主,因为他听信谣言说吃公主的肉也能长 ...
- 在论坛中出现的比较难的sql问题:38(字符拆分 字符串检索问题)
原文:在论坛中出现的比较难的sql问题:38(字符拆分 字符串检索问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得 ...
- javascript获取url参数的方式
方式一: 推荐使用此方式: url链接为:newsDetail.html?id=8a8080e35f90d9fd015f90dac7750001&modelId=123456 var URL ...
- C# 不是序列化xml 转实体Model【原家独创】
public static T XmlConvertModel<T>(string xmlStr) where T : class, new() { T ...
- C# SpinLock用法。
class Program { static void Main(string[] args) { ; ]; Stopwatch sp = new Stopwatch(); sp.Start(); / ...
- 数据多的时候为什么要使用redis而不用mysql?
2018-06-28 136465569... 转自 庆亮trj21bc... 修改 微信 分享: Redis和MySQL的应用场景是不同的. 通常来说,没有说用Redis就不用MySQL的这 ...