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只是一件事,需要去了解了解