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);

原文地址:https://www.cnblogs.com/woaiacfun/p/13893537.html