摘要:隨著函數(shù)使用場(chǎng)景的不同,而發(fā)生變化。是當(dāng)前執(zhí)行上下文中的一部分。在中新增了該方法也是強(qiáng)制更改指向。但是和的區(qū)別是更改后不會(huì)立即執(zhí)行,它會(huì)返回一個(gè)新函數(shù)。
this何意?在英文中this是一個(gè)人稱代詞,表示這個(gè)的,具體指哪個(gè)?不確定,只有在具體的語境中才可確定,在編程語言中this也有同樣的類似特性。
在js中this是一個(gè)關(guān)鍵字,它不能被當(dāng)做變量、屬性,也不可以進(jìn)行賦值操作。
this 隨著函數(shù)使用場(chǎng)景的不同,而發(fā)生變化。
this 是當(dāng)前執(zhí)行上下文中的一部分。
當(dāng)函數(shù)是獨(dú)立調(diào)用時(shí),this指向全局對(duì)象window(非嚴(yán)格模式),undefined(嚴(yán)格模式)
當(dāng)函數(shù)是作為一個(gè)對(duì)象的方法被調(diào)用時(shí),this指向該對(duì)象
構(gòu)造函數(shù)中,this指向new的對(duì)象實(shí)例
在事件處理函數(shù)中,this指向觸發(fā)事件的DOM對(duì)象
// 聲明一個(gè)函數(shù) function show(){ console.log(this); } // 聲明一個(gè)對(duì)象(變量) var obj={ _show:show } // 獨(dú)立調(diào)用 show(); // window(非嚴(yán)格模式) undefined(嚴(yán)格模式) // 作為某個(gè)對(duì)象的方法調(diào)用 show._show(); // obj // 作為構(gòu)造函數(shù)被調(diào)用,指向?qū)ο髮?shí)例 var s = new show(); // this->s // 作為事件處理函數(shù)調(diào)用 var aLink=document.getElementById("J-link"); // 事件處理函數(shù)中,this指向觸發(fā)事件的DOM對(duì)象 aLink.onclick=show; // this->aLink在JS中一切皆對(duì)象,函數(shù)也是對(duì)象,既然是對(duì)象就有屬性和方法,在JS中所有的方法都是兩個(gè)方法call(),apply()
我們可以使用這兩個(gè)方法來顯示更改函數(shù)中this的指向,
call、apply這兩個(gè)函數(shù)的共同特點(diǎn):改變并立即執(zhí)行。
區(qū)別就是傳參方式不同
call是一個(gè)一個(gè)傳入
apply是傳入一個(gè)數(shù)組,一次性傳完。
在ES5中新增了bind(),該方法也是強(qiáng)制更改this指向。但是bind和call、apply的區(qū)別是bind更改this后不會(huì)立即執(zhí)行,它會(huì)返回一個(gè)新函數(shù)。
bind傳參也是一個(gè)一個(gè)的傳入
特別注意:
call/apply如果更改為原始值的null、undefined,則this->window
call/apply如果更改為原始值的Number、String、Boolean,則this->對(duì)應(yīng)的包裝對(duì)象
// 聲明一個(gè)對(duì)象(變量) var obj={ name:"tom", age :20 }; // 聲明一個(gè)函數(shù) function show(a, b){ console.log(this, a, b); } // 獨(dú)立調(diào)用 show(1, 2); // this->window(非嚴(yán)格模式) this->undefined(嚴(yán)格模式) // 強(qiáng)制更改this指向?yàn)閛bj,并立即執(zhí)行該函數(shù) show.call(obj, 1, 2); // this->obj show.apply(obj, [1, 2]); // this->obj // 強(qiáng)制更改this指向obj,不會(huì)立即執(zhí)行,它返回一個(gè)新函數(shù),需要去主動(dòng)執(zhí)行這個(gè)新函數(shù) show.bind(obj, 1, 2)(); // this->obj
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/107315.html
摘要:可以將其他類型轉(zhuǎn)成字符串函數(shù)可以將任意類型的值轉(zhuǎn)為布爾值。提示空數(shù)組空對(duì)象轉(zhuǎn)換為布爾型也是。 在JS中數(shù)據(jù)類型轉(zhuǎn)換有兩種 相關(guān)資料參閱 官方ecma-5規(guī)范阮一峰老師類型轉(zhuǎn)換規(guī)范對(duì)相等==定義 強(qiáng)制類型轉(zhuǎn)換Number() Number函數(shù)將字符串轉(zhuǎn)為數(shù)值,要比parseInt函數(shù)嚴(yán)格很多,只要有一個(gè)字符是非數(shù)字(空格、+、-除外),那么就會(huì)被轉(zhuǎn)為NaN。 showImg(http...
摘要:繼承理論源于生活又高于生活在中繼承,和現(xiàn)實(shí)生活中繼承是相似的如兒子繼承父親財(cái)產(chǎn)子女的生理特性有父母的特性身高膚色性格等等只是一定比例上是這樣的,不是絕對(duì)的一樣中繼承方法有以下幾種本質(zhì)區(qū)別方法特別注意是本質(zhì)區(qū)別冒充繼承也稱之為借用構(gòu)造函數(shù)這種 JS繼承 理論源于生活、又高于生活 在JS中繼承,和現(xiàn)實(shí)生活中繼承是相似的 如:兒子繼承父親財(cái)產(chǎn)、子女的生理特性有父母的特性(身高、膚色、性格...
摘要:騰訊云在年底決定開發(fā)容器產(chǎn)品隨后組建容器技術(shù)團(tuán)隊(duì)并進(jìn)行技術(shù)選型通過對(duì)不同編排工具的分析對(duì)比最終選擇作為容器編排引擎并且迅速在年初推出容器解決方案為用戶提供托管的一站式服務(wù)。但是騰訊云最終選擇了現(xiàn)在看來這個(gè)選擇無比正確。Kubernetes 很火,一大批互聯(lián)網(wǎng)公司早已領(lǐng)先一步,搭建起專有的 PaaS平臺(tái),傳統(tǒng)企業(yè)們看到的 Kubernetes的趨勢(shì),亦不甘落后,在試水的道上一路狂奔。雖然,Ku...
摘要:是一種基于對(duì)象的動(dòng)態(tài)弱類型腳本語言以下簡(jiǎn)稱,是一種解釋型語言,和其他的編程語言不同,如等編譯型語言,這些語言在代碼執(zhí)行前會(huì)進(jìn)行通篇編譯,先編譯成字節(jié)碼機(jī)器碼。然后在執(zhí)行。 JavaScript是一種基于對(duì)象的動(dòng)態(tài)、弱類型腳本語言(以下簡(jiǎn)稱JS),是一種解釋型語言,和其他的編程語言不同,如java/C++等編譯型語言,這些語言在代碼執(zhí)行前會(huì)進(jìn)行通篇編譯,先編譯成字節(jié)碼(機(jī)器碼)。然后在執(zhí)...
摘要:中任務(wù)分類同步異步同步任務(wù)異步任務(wù)中異步類型定時(shí)任務(wù)網(wǎng)絡(luò)請(qǐng)求回調(diào)函數(shù)事件綁定只能傳入一個(gè)參數(shù)未完待續(xù) JS中任務(wù)分類 同步 異步 同步任務(wù) 異步任務(wù) JS中異步類型 定時(shí)任務(wù) 網(wǎng)絡(luò)請(qǐng)求 回調(diào)函數(shù) 事件綁定 Promise(resolve只能傳入一個(gè)參數(shù)) 未完待續(xù)...
閱讀 2422·2021-11-25 09:43
閱讀 2936·2021-11-24 09:39
閱讀 3002·2019-08-30 11:10
閱讀 1199·2019-08-29 16:34
閱讀 653·2019-08-29 13:25
閱讀 3407·2019-08-29 11:21
閱讀 2916·2019-08-26 11:39
閱讀 2460·2019-08-26 11:34