this指向问题
一、函数this的指向,是当我们调用函数的时候确定的,调用方式的不同决定了this的指向不同
一般指向我们的调用者:
调用方式 | this指向 |
普通函数调用 | window |
构造函数调用 | 实例对象,原型对象里得方法也指向实例对象 |
对象方法调用 | 该方法所属的对象 |
事件绑定方法 | 绑定事件的对象 |
定时器函数 | window |
立即执行函数 | window |
二、改变函数内部this指向
js提供了3中方法帮助我们处理函数内部this指向问题
1.call()方法
var o = {name:andy} function fn(a,b){ console.log(this); console.log(a + b); }; //call 第一种用法可以调用函数 fn.call(o,1,2); // 第二种用法 改变函数内部this指向 // call的主要作用可以实现继承 function Father(uname,age,sex){ this.uname = uanme; this.age = age; this.sex = sex; } function Son(uname,age,sex){ Father.call(this,uname,age,sex); console.log(this); } var son = new Son("花千骨",16,"女");
2.apply():会调用函数,改变函数内部的this指向,传递的参数必须是数组形式
主要应用场景:经常与数组有关系,比如借助于数学对象实现数组最大值最小值
3.bind():不会调用函数,可以改变函数的内部的this指向,主要应用场景:改变定时器内部的this指向:setInterval(function(){}.bind(this),2000);