JavaScript中的this笔记

69 阅读1分钟

参考
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