this的指向问题

mac2022-06-30  24

一、四种指向

1. 全局环境 -> window

2.对象环境 -> 对象

3. 构造函数环境 -> 实例对象

4. 事件对象 -> 调用者

总结:谁调用指向谁

二、两种改变指向的方式

1. call/apply 方式

2. 定义局部变量的方式:var that = this;

三、特例

1. 如果返回值是一个对象,那么this指向的就是那个返回的对象,如果返回值不是一个对象那么this还是指向函数的实例。

function fn() { this.user = '追梦子'; return {};  // function(){}/[]/Date/Array } var a = new fn; console.log(a.user); //undefined

fn 里 return functio(){} 时,打印同样为 undefined

function fn() { this.user = '追梦子'; return 1;  // 0/true/false/undefined/null/ } var a = new fn; console.log(a.user); //追梦子只要不是一个对象(引用类型),都会正常返回注:虽然 null 也是对象,但是 null 是个特例2. //Array[index](); 等同于数组对象直接打点调用函数 function foo(){   console.log(this.length); } var arr = [foo,2,3,4]; arr[0](); //43. setInterval(obj.fun,1000);obj.fun中的this一定指向window。因为setInterval(),setTimeout()相当于window.setInterval(),还是window调用

var a = 12;

var obj = {   a : 1,

  fun : function(){

    console.log(this.a);

  }

}

setInterval(obj.fun, 1000);  // 12

setInterval(obj.fun(), 1000);  // 1  注:会停止定时任务,且运行后立即打印,不会等到1s后才执行打印

//让obj.fun中的this指向obj,需要写在function()中 setInterval(function(){   obj.fun(); },1000);  // 1

转载于:https://www.cnblogs.com/s-qiu/p/9795373.html

最新回复(0)