zoukankan      html  css  js  c++  java
  • $.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);
    });
  • 相关阅读:
    SAS数据集推送到sql server 数据库 实现代码段
    windows server 2008通过任务计划程序定时访问网站
    把SAS批提交添加到鼠标右键
    SAS 报表输出一些新式控制
    iis ajax post 跨域问题解决
    sas infile 控制导入长度
    SAS infile 导入txt示例
    sas 批量处理缺少缺失值
    vue $router $route
    jsonp使用post方法
  • 原文地址:https://www.cnblogs.com/cherishSmile/p/8359317.html
Copyright © 2011-2022 走看看