zoukankan      html  css  js  c++  java
  • $.proxy() 的妙用

    $.proxy() 最主要就是用来修改函数执行时的上下文对象的。

    先看以下情景:

    <div id="panel" style="display:none;">
        <button class="close">消失</button>
    </div>
    <script>
    $("#panel").fadeIn(function () {
      $('.close').click(function () {
        $(this).fadeOut(); // 其实这里我想让 #panel 隐藏来着
      });
    });
    $('#panel').click(function() {
      setTimeout(function() {
        $(this).addClass('aNewClass'); // 这个 this 根本就不对嘛
      }, 1000);
    });
    </script>
    

    打断一下...这里用 var $this = $(this); 来处理也可以呀。

    妈蛋,还让不让我讲了啊喂。骚年郎,你是还没接触到 this 这门艺术的高深之处才会这样觉得,将 this 不去标量化才是我们装逼的价值。

    不但少了个生成变量的性能输出,还避免了变量名耦合,最极致的莫过于提高了复用性...

    看一眼改版后的代码

    $("#panel").fadeIn(function(){
        $('.close').click($.proxy(HidePanel, this));
        // 相比这个 $('.close').click(function(){HidePanel()}); 优美很多
    });
    function HidePanel() {
        $(this).fadeOut();
    }
    $('#panel').click(function() {
      setTimeout($.proxy(function() {
        $(this).addClass('aNewClass');
      }, this), 1000);
    });
    

      

    上文说的是 $.proxy(fn, context) 用法,

    而 $.proxy(context, name) 用法感觉更多的用在对象上,个人用的较少,因为感觉 new 一个对象函数要更爽(而 new 出来的 this 肯定不会乱了呀),不过还是列一下吧

    var person = {
      name: "zyh",
      say: function(event) {alert(this.name)},
    }
    // $('#test').click(person.say) 显然有问题
    $('.test').click($.proxy(person,'say'));
    

    喊口号:热爱前端,活用 this!

  • 相关阅读:
    ACM-ICPC 2018 徐州赛区网络预赛 I. Characters with Hash
    hdu 5437
    poj 1502
    ACM-ICPC 2018 沈阳赛区网络预赛 K. Supreme Number
    ACM-ICPC 2018 沈阳赛区网络预赛 F. Fantastic Graph
    ACM-ICPC 2018 南京赛区网络预赛 B. The writing on the wall
    ACM-ICPC 2018 南京赛区网络预赛 J. Sum
    法里数列
    ACM-ICPC 2018 南京赛区网络预赛 L. Magical Girl Haze
    Hashtable 为什么不叫 HashTable?
  • 原文地址:https://www.cnblogs.com/foreverZ/p/5951911.html
Copyright © 2011-2022 走看看