• $.proxy用法(解决this转移问题)


    在某些情况下,我们调用Javascript函数时候,this指针并不一定是我们所期望的那个,例如:

    $('#myElement').click(function() {
        setTimeout(function() {
            // 这个this指向的是settimeout函数内部,而非之前的html元素
            $(this).addClass('aNewClass');
        }, 1000);
    });
    

    这时候怎么办呢,通常的一种做法是这样的:

    $('#myElement').click(function() {
        var that = this;     //用that变量把this储存起来
        setTimeout(function() {
            $(that).addClass('aNewClass');
        }, 1000);
    });
    

    但是,在使用了jquery框架的情况下, 有一种更好的方式,就是使用$.proxy函数。
    jQuery.proxy(),接受一个函数,然后返回一个新函数,并且这个新函数始终保持了特定的上下文(context )语境。
    有两种语法:

    jQuery.proxy( function, context )
    /**function:将要改变上下文语境的函数。
    ** context:函数的上下文语境(`this`)会被设置成这个 object 对象。
    **/
    jQuery.proxy( context, name )
    /**context:函数的上下文语境会被设置成这个 object 对象。
    **name:将要改变上下文语境的函数名(这个函数必须是前一个参数 ‘context’ 对象的属性)
    **/
    

    上面的例子使用这种方式就可以修改成:

    $('#myElement').click(function() {
        setTimeout($.proxy(function() {
            $(this).addClass('aNewClass');  
        }, this), 1000);
    });
  • 相关阅读:
    decode(解码)与encode(编码)——python
    Appium环境准备(二)
    cannot bind to 127.0.0.1:5037解决方法
    使用adb命令获取包名
    cookie的弊端
    jquery点击弹出一个页面+点击X可关闭的部分
    实现AJAX的异步交互的步骤
    HTML5,jQuery,ajax基础面试
    js 基础面试题
    JavaScript,DOM经典基础面试题
  • 原文地址:https://www.cnblogs.com/cherishSmile/p/8359317.html
Copyright © 2020-2023  润新知