this指向的情况,取决于函数调用的方式有哪些:
1、通过函数名()直接调用的:this指向window
2、通过对象.函数名()调用的:this指向这个对象;
3、函数作为数组的一个元素,通过数组下标调用的:this指向这个数组
4、函数作为window内置函数的回调函数调用时:this指向window
例:setTimeout(func,1000);setInterval等
5、函数作为构造函数,用new关键字调用时:this指向的是new出的新对象
例:function f1(){
var tmp = 1;
this.x = 3;
console.log(tmp); //A
console.log(this.x); //B
}
var obj = new f1(); //1
console.log(obj.x) //2
console.log(f1()); //3
这道题让我重新认识了对象和函数,首先看代码(1),这里实例话化了 f1 这 个类。相当于执行了 f1 函数。所以这个时候 A 会输出 1, 而 B 这个时候的 thi s 代表的是 实例化的当前对象 obj B 输出 3.。 代码(2)毋庸置疑会输出 3, 重点 代码(3)首先这里将不再是一个类,它只是一个函数。那么 A 输出 1, B 呢? 这里的 this 代表的其实就是 window 对象,那么 this.x 就是一个全局变量 相当于 在外部 的一个全局变量。所以 B 输出 3。最后代码由于 f 没有返回值那么一个函数 如果没返回值的话,将会返回 underfined ,所以答案就是 : 1, 3, 3, 1, 3, underfined 。
原文:https://www.cnblogs.com/hangzhou728/p/10770932.html