在javascript編程中,this是一個(gè)非常重要的概念。它代表了函數(shù)執(zhí)行時(shí)所處的上下文環(huán)境,也就是當(dāng)前函數(shù)所屬的對(duì)象。理解this的概念對(duì)于編寫高質(zhì)量的javascript代碼是非常必要的。
在javascript中,this的值是在函數(shù)被調(diào)用時(shí)確定的,并且與函數(shù)的定義方式和位置沒有關(guān)系。
function foo() { console.log(this); } foo(); // this指向全局對(duì)象
在上面的例子中,this指向的是全局對(duì)象。在其他情況下,this的值可能會(huì)被綁定到一個(gè)特定的對(duì)象上。
var obj = { name: 'Tom', sayName: function() { console.log(this.name); } }; obj.sayName(); // this指向obj對(duì)象,輸出Tom
在上面的例子中,this指向了obj對(duì)象,并且通過this引用了obj的name屬性。
需要注意的是,在箭頭函數(shù)中,this的指向與普通函數(shù)有所不同。箭頭函數(shù)中的this是被繼承自父級(jí)作用域的,所以可能與預(yù)期不一致:
var obj = { name: 'Tom', sayName: function() { var arrow = () => console.log(this.name); arrow(); } }; obj.sayName(); // this指向obj對(duì)象,輸出Tom
在上面的例子中,this指向了obj對(duì)象,并且通過this引用了obj的name屬性。
當(dāng)然,除了對(duì)象方法,this也可以被用于構(gòu)造函數(shù)和作為函數(shù)調(diào)用:
function Person(name) { this.name = name; console.log(this); } var person = new Person('Tom'); // this指向Person實(shí)例對(duì)象 Person('Tom'); // this指向全局對(duì)象
在上面的例子中,this在構(gòu)造函數(shù)中指向了Person的實(shí)例對(duì)象,而在作為函數(shù)調(diào)用時(shí)則指向了全局對(duì)象。
總的來說,this的值是在函數(shù)被調(diào)用時(shí)才確定的。根據(jù)函數(shù)的調(diào)用方式和調(diào)用位置,this的值可能會(huì)被綁定到一個(gè)特定的對(duì)象上,也可能指向全局對(duì)象。