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中执行的答案以下:函数
上图咱们能够看出咱们执行obj对象下的ded函数时,打印出来的事Object对象里面的全部属性,展现这个对象学习
能够看到obj对象包含的方法和属性都包含在this对象下面,再运行fff函数,把this和obj对象进行比较,能够看出这两个是恒等的,因此在对象里的this指向这个对象。测试
2.直接调用函数时的this指向
先建立一个函数:this
function main(){ this.aad = 234; console.log(this); } main();
运行效果以下:spa
能够看到咱们打印出来的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();
能够看出xxx.def函数仍是指向main函数,但这只是把上下文给打印出来了,但当咱们打印this与构造函数以及实现对象比较时就能够看出区别了,与构造函数main比较出来的值是false;与xxx函数比较时显示是true,因此构造函数this事指向当前实例化对象的。ip
这就是我关于this学习的总结,但愿能给须要的人点帮助,而后有啥不足但愿有大神能指点出来。it