"this"关键字在js中的工作原理
在js中,关键字“”this“”用于引用当前执行代码的上下文对象。它的工作原理是根据函数的调用方式来确定其绑定的值。它的值会根据函数的调用方式而变化。下面解释几种常见的 "this" 绑定规则:
1. 默认绑定:“this”默认绑定到全局对象(在浏览器环境中是window对象,在Node.js中是global对象)
function sayName() { console.log(this.name); } var name = "John"; sayName(); // 输出:John
2.隐式绑定:当函数作为对象的方法调用时,this绑定到调用该方法的对象。
let person = { name:'John', sayName:function(){ console.log(this.name) } } person.sayName()// 输出:John
3.显式绑定:通过call, apply, bind方法可以显示指定函数的执行上下文。
function sayName() { console.log(this.name); } var person = { name: "John" }; sayName.call(person); // 输出:John
4. new绑定:当使用new关键字创建一个实例对象时,this绑定到新创建的实例对象。
function Person(name) { this.name = name; } var john = new Person("John"); console.log(john.name); // 输出:John
5.箭头函数:箭头函数没有自己的this绑定,他会继承外层作用域的this值。
var person = { name: "John", sayName: function() { setTimeout(() => { console.log(this.name); }, 1000); } }; person.sayName(); // 输出:John