this
this在严格模式下和非严格模式下也有差别
- 在浏览器中声明的全局对象this指向的是window
- 在函数调用的时候,浏览器中在非严格的模式下this指向的是window否则指向的是undefined(在非严格模式下nodejs中this指向是globalThis)
- this在类中表现与函数一致,派生类(子类)没有自己的this需要super()指向基类(父类)中的this
- 箭头函数中,this指向与封闭词法环境的this保持一致(就是跟最近的作用域指向一致)
- 对象方法中this指向调用的该函数的对象,构造函数的this指向正在构造的新对象(DOM,方法,函数可以理解谁调用this指向谁)
改变this指向
call apply bind
function add(c) {
console.log(this.a, this.b, c)
}
var obj = {
a: 1,
b: 2
}
add.call(obj, 000)
function add(c) {
console.log(this.a, this.b, c)
}
var obj = {
a: 1,
b: 2
}
add.apply(obj, [00])
bind示例:会创建一个与add有着相同函数体和作用域的函数addBind,在addBind新的函数中this永久绑定在bind的第一个参数(obj)
// 会创建一个与add有着相同函数体和作用域的函数addBind,在addBind新的函数中this永久绑定在bind的第一个参数(obj)
function add(c) {
console.log(this.a, this.b, c)
}
var obj = {
a: 1,
b: 2
}
var obj2 = {
a: 3
}
const addBind = add.bind(obj,obj2)
console.log(addBind())
// 输出1