this的指向不是在编写时确定的,而是在执行时确定的 1、在默认情况下this指向全局,比如在浏览器中就是指向window,node中指向global 2、如果被调用的位置存在上下文对象时,那么函数是被隐式绑定的
function f() {
console.log(this.name)
}
const obj = {
name: 'liu',
fn: f
}
obj.fn(); // 被调用的位置恰好被对象obj拥有,打印'liu'
3、显示改变this指向,常见方法,call、apply、bind
function f() {
console.log( this.name );
}
var obj = {
name: "liu",
};
f.call(obj) // 打印‘liu’
4、new绑定
用new调用一个构造函数,会创建一个新对象,在创建这个新对象的过程中,新对象会自动绑定到上级函数的(person对象)的this上,那么this就指向这个新对象
function Person(name) {
this.name = name;
console.log(name);
}
var person1 = new Person('Messi')