zoukankan      html  css  js  c++  java
  • 深入理解javascript中的this 关键字(转载)

      在JavaScript中this变量是一个令人难以摸清的关键字,this可谓是非常强大,充分了解this的相关知识有助于我们在编写面向对象的JavaScript程序时能够游刃有余。

    1、一般用处

      对于this关键字最重要的是明确this所引用的对象是哪一个,也许很多资料上都有自己的解释,但有些概念将的偏繁杂。而我的理解是:首先分析this所在的函数是当做哪个对象的方法调用的,则该对象就是this所引用的对象。

    Example 一:

    var obj = {};
    obj.x = 100;
    obj.y = function() { alert( this.x ); };
    obj.y();    //弹出 100
    

    这段代码非常容易理解,当执行 obj.y() 时,函数是作为对象obj的方法调用的,因此函数体内的this指向的是obj对象,所以会弹出100。 

    example 二:

    var checkThis = function() {
        alert( this.x); 
    };
    var x = 'this is a property of window';
    
    var obj = {};
    obj.x = 100;
    obj.y = function(){ alert( this.x ); };
    
    var obj2 = obj.y;
    
    obj.y();   //弹出 100
    checkThis();    //弹出 'this is a property of window
    obj2();    //弹出 'this is a property of window
    

      这里为什么会弹出 'this is a property of window',可能有些让人迷惑。在JavaScript的变量作用域里有一条规则“全局变量都是window对象的属性”。当执行 checkThis() 时相当于 window.checkThis(),因此,此时checkThis函数体内的this关键字的指向变成了window对象,而又因为window对象又一个x属性( 'this is a property of window'),所以会弹出 'this is a property of window'。

      上面的两个示例都是比较容易理解的,因为只要判断出当前函数是作为哪个对象的方法调用(被哪个对象调用)的,就可以很容易的判断出当前this变量的指向。

    2、this.x与apply()、call()

      通过call和apply可以重新定义函数的执行环境,即this的指向,这对于一些应用当中是非常常用的。

    Example 三:Call()  

    function aaa()
    {
        return this.innerHeight;
    }
    
    var bbb = {};
    
    
    console.log(aaa.call("bbb"));
    console.log(aaa());
    

    运行结果:

    注:apply()方法的作用与call()类似,只不过参数的定义不同  

    3、诡异的this用法

    var obj = {
        x:100,
        y:function(){
            setTimeout(
                function () { alert(this.x)}
                ,2000
                )
    
        }
    
    }
    
    obj.y();
    

    运行结果:

    如何达到预期的效果

    var obj = {
        x:100,
        y: function () {
            var that = this;
            setTimeout(
                function () { alert(that.x)}
                ,2000
                )
    
        }
    
    }
    
    obj.y();
    

    运行结果:

    4、事件监听函数中的this

    var one = document.getElementById( 'one' );
    one.onclick = function(){
        alert( this.innerHTML );    //this指向的是one元素,这点十分简单..
    };
    

      

      

      

      

     

  • 相关阅读:
    Linux常用命令
    Linux常用命令
    Linux常用命令
    Linux 三剑客
    Python思维导图(二)—— 数据类型
    Python思维导图(一)—— 基础
    testNg
    Linux安装Git
    本地Git绑定Github仓库
    TCP协议与UDP协议
  • 原文地址:https://www.cnblogs.com/YanYongSong/p/4632536.html
Copyright © 2011-2022 走看看