关于js中this指向的总结

js中this指向问题一直是个坑,以前一直是懵懵懂懂的,大概知道一点,但一直不知道各类状况下指向有什么区别,今天亲自动手测试了下this的指向。
1.在对象中的this
对象中的this指向咱们建立的对象,例如:chrome

var obj ={
    ccc : 1122,
    ddd : 2233,
    ded : function(){
            console.log(this);
        }  ,
    fff : function(){
            console.log(this === obj );
        }
}
obj.ded();
obj.fff();

在chrome中执行的答案以下:
clipboard.png函数

上图咱们能够看出咱们执行obj对象下的ded函数时,打印出来的事Object对象里面的全部属性,展现这个对象学习

clipboard.png

能够看到obj对象包含的方法和属性都包含在this对象下面,再运行fff函数,把this和obj对象进行比较,能够看出这两个是恒等的,因此在对象里的this指向这个对象。测试

2.直接调用函数时的this指向
先建立一个函数:this

function main(){
    this.aad = 234;
    console.log(this);    
}
main();

运行效果以下:
clipboard.pngspa

能够看到咱们打印出来的this对象指向全局变量window,而建立的aad变量直接包含在了window对象下面了,因此直接调用函数时this是指向window对象的。code

3.构造函数中的this指向
当咱们建立一个构造函数时,而且实例化一个对象时,this的指向哪里呢?先建立一个函数对象

function main(){
    this.aad = 234;
    this.def = function(){
                console.log(this);
            };
    this.foo = function(){
            console.log(this === xxx);
        };
    this.xoo = function(){
            console.log(this === main);
        };
}
var xxx = new main();
xxx.def(); 
xxx.foo();
xxx.xoo();

clipboard.png

能够看出xxx.def函数仍是指向main函数,但这只是把上下文给打印出来了,但当咱们打印this与构造函数以及实现对象比较时就能够看出区别了,与构造函数main比较出来的值是false;与xxx函数比较时显示是true,因此构造函数this事指向当前实例化对象的。ip

这就是我关于this学习的总结,但愿能给须要的人点帮助,而后有啥不足但愿有大神能指点出来。it

相关文章
相关标签/搜索