在JavaScript中,this關(guān)鍵字是非常重要的一個(gè)概念,它代表當(dāng)前函數(shù)執(zhí)行的上下文,也就是當(dāng)前函數(shù)所在的對(duì)象或者是全局對(duì)象。
在全局作用域下使用this,它指向的是window對(duì)象,這個(gè)時(shí)候this等同于window,比如:
console.log(this === window); //true
在函數(shù)調(diào)用時(shí),this指向的是函數(shù)所屬的對(duì)象,即在函數(shù)上下文中,this指向的是最后調(diào)用這個(gè)方法的對(duì)象,比如:
var obj = { name: 'Tom', sayName: function() { console.log(this.name); } }; obj.sayName(); // Tom
在事件處理函數(shù)中,this指向的是觸發(fā)事件的元素,比如:
var btn = document.getElementById('btn'); btn.addEventListener('click', function() { console.log(this); //btn });
如果單獨(dú)使用函數(shù),this指向的是全局對(duì)象,比如:
function sayName() { console.log(this.name); } sayName(); //undefined
如果使用new關(guān)鍵字創(chuàng)建一個(gè)對(duì)象,this指向新創(chuàng)建的對(duì)象,比如:
function Person(name) { this.name = name; } var person = new Person('Tom'); console.log(person.name); //Tom
在箭頭函數(shù)中,this指向的是父級(jí)作用域中的this,比如:
var obj = { name: 'Tom', sayName: () => { console.log(this.name); } }; obj.sayName(); //undefined
總結(jié)一下,this指向的是當(dāng)前執(zhí)行上下文的對(duì)象,它的具體指向取決于它所處的環(huán)境,需要根據(jù)具體情況進(jìn)行理解和使用。