在JavaScript中,函数调用时会自动绑定this,但是this的绑定规则有四种不同的方式。这些绑定方式是默认绑定、隐式绑定、显式绑定和new绑定。下面是它们的解释:
- 默认绑定:当函数独立调用时,即没有其他绑定方式选项时会使用默认绑定。例如,以下代码的this将指向全局对象window:
function sayName(name) { console.log(name); console.log(this); } sayName('Lucy'); // 输出 Lucy ,this 指向全局对象window
- 隐式绑定:当函数作为对象的方法调用时,会使用隐式绑定。例如:
const obj = { name: 'Lucy', sayName: function() { console.log(this.name); } } obj.sayName(); // 输出 Lucy
在这种情况下,this指向调用该函数的对象,也就是obj对象。
- 显式绑定:通过使用call()、apply()或bind()方法,可以显式指定this值。例如:
function sayName() { console.log(this.name); } const person = { name: 'Lucy' } sayName.call(person); // 输出 Lucy
在这种情况下,使用call方法指定this绑定到person对象上。
- new绑定:当使用new关键字调用函数时,this会被绑定到构造函数的实例上。例如:
function Person(name) { this.name = name; } const lucy = new Person('Lucy'); console.log(lucy.name); // 输出 Lucy
在这种情况下,创建了Person构造函数的实例对象lucy并将其赋值给变量lucy。这里的this被绑定到新创建的lucy对象上。