1.默认绑定:当函数独立调用时(即不作为对象的方法调用,也不使用 new
关键字调用),this
默认绑定到全局对象(在浏览器环境中通常指 window
对象,Node.js 环境中指 global
对象)。
javascriptCopy Codefunction sayHello() {
console.log("Hello, " + this.name);
}
var name = "Alice";
sayHello(); // 输出 "Hello, Alice"
2.隐式绑定:当函数作为对象的方法调用时,this
绑定到调用该方法的对象。
javascriptCopy Codevar person = {
name: "Alice",
sayHello: function() {
console.log("Hello, " + this.name);
}
};
person.sayHello(); // 输出 "Hello, Alice"
3.显式绑定:通过 call
、apply
或 bind
方法,显式指定函数内部的 this
绑定到特定对象。
javascriptCopy Codefunction sayHello() {
console.log("Hello, " + this.name);
}
var person = {
name: "Alice"
};
sayHello.call(person); // 输出 "Hello, Alice"
sayHello.apply(person); // 输出 "Hello, Alice"
var sayHelloToPerson = sayHello.bind(person);
sayHelloToPerson(); // 输出 "Hello, Alice"
4.构造函数绑定:当函数通过 new
关键字调用时,this
绑定到新创建的对象。
javascriptCopy Codefunction Person(name) {
this.name = name;
}
var person = new Person("Alice");
console.log(person.name); // 输出 "Alice"
5.箭头函数绑定:箭头函数没有自己的 this
绑定,它会继承外层(父级或全局)作用域的 this
值。
javascriptCopy Codevar name = "Alice";
var sayHello = () => {
console.log("Hello, " + this.name);
};
sayHello(); // 输出 "Hello, Alice"