在ES5和ES6中,this的指向有所不同。
在ES5中,this的默認(rèn)指向是全局對(duì)象(在瀏覽器環(huán)境中通常是window對(duì)象)。在函數(shù)中,this的指向取決于函數(shù)的調(diào)用方式。例如,在方法調(diào)用中,this指向調(diào)用該方法的對(duì)象;在構(gòu)造函數(shù)中,this指向構(gòu)造出來的新對(duì)象;在定時(shí)器或事件處理函數(shù)中,this指向全局對(duì)象。此外,在ES5中,如果在回調(diào)函數(shù)中使用this,通常會(huì)使用var that = this來保存當(dāng)前的this值。
而在ES6中,this的默認(rèn)指向發(fā)生了變化。在ES6的類(Class)中,以及Vue等框架的實(shí)例方法中,this的默認(rèn)指向變成了Vue實(shí)例(或者類的實(shí)例)。不過,在ES6的箭頭函數(shù)中,this的指向則是由定義時(shí)所在的對(duì)象決定的,而不是由函數(shù)的調(diào)用者決定。這意味著箭頭函數(shù)中的this是靜態(tài)的,不會(huì)因?yàn)楹瘮?shù)的調(diào)用方式而改變。
在ES5和ES6中,this的使用有較大差異,主要體現(xiàn)在以下幾個(gè)方面:
在ES5中,this的默認(rèn)指向是全局對(duì)象(如window)。例如,在瀏覽器環(huán)境中,如果在代碼中直接使用console.log(this),將會(huì)輸出全局對(duì)象。在函數(shù)中,this的指向取決于函數(shù)的調(diào)用方式。例如,在方法調(diào)用中,this指向調(diào)用該方法的對(duì)象;在構(gòu)造函數(shù)中,this指向構(gòu)造出來的新對(duì)象。如果在回調(diào)函數(shù)中使用this,通常會(huì)使用var that = this來保存當(dāng)前的this值。
在ES6中
舉例說明:
假設(shè)我們有一個(gè)Vue組件,該組件包含一個(gè)方法:
javascript
復(fù)制
methods: {
? someMethod() {
? ? console.log(this); // 在ES5中,this指向全局對(duì)象;在ES6中,this指向Vue實(shí)例
? }
}
在ES5中,如果在一個(gè)非嚴(yán)格模式的全局環(huán)境中直接調(diào)用這個(gè)方法(如someMethod()),this將指向全局對(duì)象(如window)。如果在一個(gè)嚴(yán)格模式的全局環(huán)境中直接調(diào)用這個(gè)方法(如"use strict"; someMethod()),this將是undefined。
在ES6中,如果在一個(gè)Vue組件的方法中調(diào)用這個(gè)方法(如通過組件實(shí)例調(diào)用),由于ES6的默認(rèn)行為是將this指向Vue實(shí)例,因此this將指向該Vue實(shí)例。
需要注意的是,由于箭頭函數(shù)中的this是靜態(tài)的,因此在使用箭頭函數(shù)作為回調(diào)函數(shù)時(shí)需要注意其行為。例如:
javascript
復(fù)制
someMethod: function() {
? setTimeout(() => {
? ? console.log(this); // 在ES5中,this指向全局對(duì)象;在ES6中,this仍然是箭頭函數(shù)被定義時(shí)的上下文中的對(duì)象
? }, 1000);
}
在這個(gè)例子中,由于使用了箭頭函數(shù)作為回調(diào)函數(shù),即使在ES6中,箭頭函數(shù)中的this也不會(huì)自動(dòng)綁定到Vue實(shí)例。因此,在使用箭頭函數(shù)作為回調(diào)函數(shù)時(shí),需要特別注意其行為和上下文。
?文章來源地址http://www.zghlxwxcb.cn/news/detail-805180.html文章來源:http://www.zghlxwxcb.cn/news/detail-805180.html
?
到了這里,關(guān)于this在Es5和Es6的區(qū)別的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!