• 关于 $.proxy(fn,context,arg) 方法


      1 <!-- $.proxy(fn,this,agrument);

    proxy 代理 思考做酒的代理商
    argument就是代理商 把fn所在的作用域对象的参数/属性 代理给fn执行。

      2 
      3 fn: 要被调用的已有的函数。
      4 
      5 this: fn函数所在的对象的名称。 就是 fn在哪里调用,this 就是指向那个作用域中的对象。
      6       说白了就是:fn 函数在哪个作用被调用,this就是指向谁。
      7 
      8 arg: 把fn函数所在的对象 this 的参数 传递给fn执行。
      9       arg 一定是 fn函数所在的对象this 里面的任何参数皆可。
     10  -->
     11 <!DOCTYPE html>
     12 <html lang="en">
     13 <head>
     14   <meta charset="UTF-8">
     15   <title>Document</title>
     16 </head>
     17 <body>
     18   <div id="panel" style="display:none;">
     19       <button class="close">消失</button>
     20   </div>
     21   <script src="js/jquery.js"></script>
     22   <script>
     23       /*$("#panel").fadeIn(3000,function () {
     24         $('.close').click(function () {
     25           $(this).fadeOut(); // 其实这里我想让 #panel 隐藏来着
     26       console.log($(this));
     27         });
     28       });
     29       $('#panel').click(function() {
     30         setTimeout(function() {
     31           $(this).addClass('aNewClass'); // 这个 this 根本就不对嘛
     32       console.log($(this));
     33         }, 1000);
     34       });*/
     35 
     36       $("#panel").fadeIn(function(){
     37         console.log(this);//指向 $('$panel')对象
     38           $('.close').click($.proxy(HidePanel, this));
     39           // 相比这个 $('.close').click(function(){HidePanel()}); 优美很多
     40       });
     41 
     42       function HidePanel() {
     43         //如果HidePanel这个函数单独调用,那么这里的this指向window
     44         //$(this).fadeOut(); 而这句话就会报错,因为window是无法执行fadeOut动画的。
     45         //这里不能单独执行,如果没有$(this).fadeOut();这句代码,那就可以执行。
     46         //该函数在哪个作用域中执行,这个this就指向谁。
     47         console.log(this);
     48           $(this).fadeOut();
     49       }
     50 
     51       $('#panel').click(function() {
     52         setTimeout(
     53               $.proxy(
     54                     function(e) {
     55                      $(this).addClass('aNewClass');
     56                         for (var p in e) {
     57                           console.log(e);
     58                         }
     59                   },
     60                     this,
     61                     'woaini'),
     62           1000);
     63       });
     64 
     65       //单独执行函数HidePanel 会报错,函数中的this指向window,而window是无法执行fadeOut动画的
     66       // HidePanel();   
     67   </script>
     68 </body>
     69 </html>
     70 ====================
     71 $(selector).proxy(context,name)
     72 function  要被调用的已有的函数。
     73 name      已有的函数,其上下文将被改变(应该是 context 对象的属性)。
     74           就是:不再执行整个function函数了,而是直接执行context。
     75 <!DOCTYPE html>
     76 <html>
     77 <head>
     78 <meta charset="utf-8"> 
     79 <title>菜鸟教程(runoob.com)</title> 
     80 <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js">
     81 </script>
     82 <script>
     83 $(document).ready(function(){
     84   var objPerson = {
     85     name: "John Doe",
     86     age: 32,
     87     test: function(){
     88       $("p").after("Name: " + this.name + "<br> Age: " + this.age);
     89     }
     90   };
     91   $("button").click($.proxy(objPerson,"test"));
     92 });
     93 </script>
     94 </head>
     95 <body>
     96 
     97 <button>执行 test 函数</button>
     98 <p></p>
     99 
    100 </body>
    101 </html>
    102 ============
    103 语法:$(selector).proxy(function,context)
    104 function   要被调用的已有的函数。
    105 context    函数所在的对象的名称。
    106 <!DOCTYPE html>
    107 <html>
    108 <head>
    109 <meta charset="utf-8"> 
    110 <title>菜鸟教程(runoob.com)</title> 
    111 <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js">
    112 </script>
    113 <script>
    114 $(document).ready(function(){
    115   test=function()
    116   {
    117     this.txt="这是一个对象属性";
    118     $("div").click($.proxy(this.myClick,this));
    119   };
    120 
    121   test.prototype.myClick = function(event)
    122   {
    123     alert(this.txt);
    124     alert(event.currentTarget.nodeName);
    125   };
    126 
    127   var x = new test();
    128 });
    129 </script>
    130 </head>
    131 <body>
    132 
    133 <div>这是一个 div 元素。</div>
    134 
    135 </body>
    136 </html>
  • 相关阅读:
    201521044091《Java程序设计》第7周学习总结
    201521044091《java程序设计》第四次总结
    201521044091 《java程序设计》第八周学习总结
    201521044091 《Java程序设计》第5周学习总结
    201521044091 《Java程序设计》第2周学习总结
    201521044091 《Java程序设计》第3周学习总结
    MySQL设置字符集CHARACTER SET
    Create My MySQL configuration by Percona
    How to use jQuery to manipulate Cookies
    How to use OpenXml to import xml data to Sql server
  • 原文地址:https://www.cnblogs.com/Knowledge-is-infinite/p/11370973.html
Copyright © 2020-2023  润新知