参考
MDN this
JS 中 this 指向问题
this、apply、call、bind
this是什么
在JavaScript的方法调用时,会接收到两种外部信息,一种是this对象,一种是函数参数
默认情况下的this
this 指向最后调用它的那个对象;
如果没有调用的对象那么就是全局对象 window;
改变this指向
有几种方法,可以改变this的指向,其中包括:
call
在实参列表前,加入要传入的this对象
function fn(addr,count){
console.log("方法fn被调用");
console.log(this);
console.log(addr);
console.log(count);
}
fn('shanghai',187); // this,打印出window
fn.call({"name":"abc"},'shanghai',187); // this,打印出abc对象
apply
相比call,传入形式不同,实参列表放在了一个数组中
function fn(addr,count){
console.log("方法fn被调用");
console.log(this);
console.log(addr);
console.log(count);
}
fn('shanghai',187); // this,打印出window
fn.apply({"name":"abc"},['shanghai',187]); // this,打印出abc对象
bind
使用类似于call,传入对象给this,但是bind不是调用方法,而是得到this被固定的方法
function fn(addr,count){
console.log("方法fn被调用");
console.log(this);
console.log(addr);
console.log(count);
}
var f = fn.bind({"name":"abc"}); // 得到this值被固定的fn方法
console.log(f instanceof Function); // true
f('CN',99); // {"name":"abc"} CN 99
f.call({"name":"frank"},'hangzhou',999); // 代码运行结果,this仍然是{"name":"abc"} CN 99