# JavaScript this
# Key
this不指向函数自身 this不指向函数的词法作用域
# This
This是在运行时绑定的,并不是在编写时绑定的。 当一个函数被调用时,会创建一个活动记录(也被称为执行上下文)。这个记录会包含函数在哪里被调用(调用栈),函数的调用方式,传入的参数信息等。 this就是这个记录的一个属性,会在函数执行的过程中用到。
# 绑定规则
# 1.独立函数调用中的this指向全局window(默认绑定)
function foo() {
console.log(this.a);
}
const a = 2;
foo(); //2 <==其实等价于window.foo()
# 2.隐式绑定
看调用位置是否有上下文对象,或者说是否被某个对象拥有或者包含
const obj = {
a: 2,
foo: function() {
console.log(this.a);
}
};
obj.foo(); //2
# 3.显示绑定
使用bind或者apply实现显示的调用
# 4.New 调用
使用new来调用函数时,或者说发生构造函数调用时,会自动的执行下面的操作:
- 创建一个(构造一个)全新的对象
- 这个新的对象会执行[[Prototype]]连接
- 这个新的对象会绑定到函数调用的this
- 如果函数没有返回其他对象,那么new表达式中的函数调用会自动返回这个新的对象
function foo(name) {
this.name = name
}
const bar = new foo('star');
console.log(bar.name);