this指向

121 阅读1分钟

this指向 (运行结果在node环境下运行,并不是在浏览器控制台中)

在JavaScript 函数内部,this的值是动态的,即是由执行上下文决定的 ,有4中常规的调用方式

function show(){
	console.log(this)
}
show() // Object [global]
'use strict'
function show(){
	console.log(this)
}
show() // undefined
  • 1、在简单的调用的时候,this的值就等于全局对象 在严格模式中,则为undefined
const obj = {
	a:'1',
	show(){
		console.log(this)
	}
}
obj.show() //{ a: '1', show: [Function: show] }
  • 在方法调用是,this的值就是含有该方法的对象
const obj = {
	a:'1',
	show(){
		console.log(this)
	}
}
const obj_1 = {
	b:"2",
	show(){
		console.log(this)
	}
}
obj_1.show.call(obj) // { a: '1', show: [Function: show] }
  • 在使用 myFunc.call(context, arg1, ..., argN)myFunc.apply(context, [arg1, ..., argN])的间接调用中,this的值等于第一个参数:
function show(){
	console.log(this)
}
new show() //show {}
  • 使用new关键字时,this等于创建的实例

总结

1、在简单的调用的时候,函数运行环境是window,所以this的值就等于全局对象, 在严格模式中,则为undefined

JavaScript高级程序设计中有这样一句话:在严格模式下,未指定环境对象而调用函数,则this值不会转为window。除非明确把函数添加到某个对象或者调用appy()或call(),否则this值将是undefined

2、在方法调用是,this的值就是含有该方法的对象

3、在使用 myFunc.call(context, arg1, ..., argN)myFunc.apply(context, [arg1, ..., argN])的间接调用中,this的值等于第一个参数,

call 和 apply很相似,区别就是参数不一样,用法感觉很有意思

4、使用new关键字时,this等于创建的实例

new在创建对象的时候做了很多事,this只是一件事,需要去了解了解

参考文档: mp.weixin.qq.com/s/iHCyda-d9…