分别解释下js中默认绑定、隐式绑定、显式绑定、new绑定的区别

18 min read

在JavaScript中,函数调用时会自动绑定this,但是this的绑定规则有四种不同的方式。这些绑定方式是默认绑定、隐式绑定、显式绑定和new绑定。下面是它们的解释:

  1. 默认绑定:当函数独立调用时,即没有其他绑定方式选项时会使用默认绑定。例如,以下代码的this将指向全局对象window:
function sayName(name) {
  console.log(name);
  console.log(this);
}

sayName('Lucy'); // 输出 Lucy ,this 指向全局对象window
  1. 隐式绑定:当函数作为对象的方法调用时,会使用隐式绑定。例如:
const obj = {
  name: 'Lucy',
  sayName: function() {
    console.log(this.name);
  }
}

obj.sayName(); // 输出 Lucy

在这种情况下,this指向调用该函数的对象,也就是obj对象。

  1. 显式绑定:通过使用call()、apply()或bind()方法,可以显式指定this值。例如:
function sayName() {
  console.log(this.name);
}

const person = {
  name: 'Lucy'
}

sayName.call(person); // 输出 Lucy

在这种情况下,使用call方法指定this绑定到person对象上。

  1. new绑定:当使用new关键字调用函数时,this会被绑定到构造函数的实例上。例如:
function Person(name) {
  this.name = name;
}

const lucy = new Person('Lucy');
console.log(lucy.name); // 输出 Lucy

在这种情况下,创建了Person构造函数的实例对象lucy并将其赋值给变量lucy。这里的this被绑定到新创建的lucy对象上。