JavaScript笔记1--this的含义

this的含义

由于JavaScript 有运行期绑定的特性,JavaScript 中的 this 含义不是固定的,它可以是全局对象、当前对象或者任意其他对象,这完全取决于函数的调用方式。

随着函数使用场合的不同,this的值会发生变化。但是有一个总的原则,那就是this指的是,调用函数的那个对象。

(1)在函数被直接调用时,this绑定到全局对象。在浏览器中,window 就是该全局对象。
(2)函数作为构造函数被调用,就是通过这个函数new一个新对象。这时this就指这个新的对象。

<script>
    function F1(){
        var name = "GD";
        console.log("测试:"+this.name);
    }

    function Test(){
        //函数直接被调用
        //this = window,this.name="",因为没有给window指定name啊;
        F1();

        //函数作为构造函数被调用
        //this = object,this.name = "",因为var定义的name变量和this.name不是同一个变量,只是名称相同而已;
        var f = new F1();
    }
</script>

(3)函数作为内部函数被调用,this不是其父函数,仍然是全局变量。

<script>
    function F1(){
        console.log("测试1:"+this);
        function innerTest(){
            console.log("测试2:"+this);
        }
        return innerTest;
    }

    function Test(){
        var inner = F1();
        //内部函数innerTest里面的this = window
        inner();    
    }
</script> 

(4)函数作为某对象的方法被调用,里面的this指当前对象。在 JavaScript 中函数也是对象。因此函数可以作为一个对象的属性。

<script>
function Test(){
    var obj1 = {
        name: 'Byron',
        fn : function(){
            console.log(this);
        }
    };

    //函数作为对象方法,里面的this = 当前对象
    obj1.fn();

    //函数作为对象方法,如果单独调用,里面的this = window
    var fn2 = obj1.fn;
    fn2();  
}
</script>

总而言之,随着函数使用场合的不同,this的值会发生变化。但是有一个总的原则,那就是this指的是,调用函数的那个对象。

发布了38 篇原创文章 · 获赞 2 · 访问量 3万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章