成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

原生JS大揭秘—撩開this的面紗

Brenner / 2885人閱讀

摘要:隨著函數(shù)使用場景的不同,而發(fā)生變化。是當前執(zhí)行上下文中的一部分。在中新增了該方法也是強制更改指向。但是和的區(qū)別是更改后不會立即執(zhí)行,它會返回一個新函數(shù)。

this何意?在英文中this是一個人稱代詞,表示這個的,具體指哪個?不確定,只有在具體的語境中才可確定,在編程語言中this也有同樣的類似特性。
在js中this是一個關(guān)鍵字,它不能被當做變量、屬性,也不可以進行賦值操作。
this 隨著函數(shù)使用場景的不同,而發(fā)生變化。
this 是當前執(zhí)行上下文中的一部分。

this永遠指向函數(shù)的調(diào)用者。 函數(shù)內(nèi)this的取決于函數(shù)是如何被調(diào)用

當函數(shù)是獨立調(diào)用時,this指向全局對象window(非嚴格模式),undefined(嚴格模式)

當函數(shù)是作為一個對象的方法被調(diào)用時,this指向該對象

構(gòu)造函數(shù)中,this指向new的對象實例

在事件處理函數(shù)中,this指向觸發(fā)事件的DOM對象

// 聲明一個函數(shù)
function show(){
    console.log(this);
}

// 聲明一個對象(變量)
var obj={
    _show:show
}

// 獨立調(diào)用
show(); // window(非嚴格模式) undefined(嚴格模式)

// 作為某個對象的方法調(diào)用
show._show(); // obj

// 作為構(gòu)造函數(shù)被調(diào)用,指向?qū)ο髮嵗?var s = new show(); // this->s

// 作為事件處理函數(shù)調(diào)用
var aLink=document.getElementById("J-link");
// 事件處理函數(shù)中,this指向觸發(fā)事件的DOM對象
aLink.onclick=show; // this->aLink

在JS中一切皆對象,函數(shù)也是對象,既然是對象就有屬性和方法,在JS中所有的方法都是兩個方法call(),apply()

我們可以使用這兩個方法來顯示更改函數(shù)中this的指向,

call、apply這兩個函數(shù)的共同特點:改變并立即執(zhí)行。

區(qū)別就是傳參方式不同

call是一個一個傳入

apply是傳入一個數(shù)組,一次性傳完。

在ES5中新增了bind(),該方法也是強制更改this指向。

但是bind和call、apply的區(qū)別是bind更改this后不會立即執(zhí)行,它會返回一個新函數(shù)

bind傳參也是一個一個的傳入

特別注意
call/apply如果更改為原始值的null、undefined,則this->window
call/apply如果更改為原始值的Number、String、Boolean,則this->對應的包裝對象
// 聲明一個對象(變量)
var obj={
    name:"tom",
    age :20
};

// 聲明一個函數(shù)
function show(a, b){
    console.log(this, a, b);
}

// 獨立調(diào)用
show(1, 2); // this->window(非嚴格模式) this->undefined(嚴格模式)

// 強制更改this指向為obj,并立即執(zhí)行該函數(shù)
show.call(obj, 1, 2); // this->obj
show.apply(obj, [1, 2]); // this->obj

// 強制更改this指向obj,不會立即執(zhí)行,它返回一個新函數(shù),需要去主動執(zhí)行這個新函數(shù)
show.bind(obj, 1, 2)(); // this->obj

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/107315.html

相關(guān)文章

  • 原生JS揭秘—揭開數(shù)據(jù)類型轉(zhuǎn)換面紗

    摘要:可以將其他類型轉(zhuǎn)成字符串函數(shù)可以將任意類型的值轉(zhuǎn)為布爾值。提示空數(shù)組空對象轉(zhuǎn)換為布爾型也是。 在JS中數(shù)據(jù)類型轉(zhuǎn)換有兩種 相關(guān)資料參閱 官方ecma-5規(guī)范阮一峰老師類型轉(zhuǎn)換規(guī)范對相等==定義 強制類型轉(zhuǎn)換Number() Number函數(shù)將字符串轉(zhuǎn)為數(shù)值,要比parseInt函數(shù)嚴格很多,只要有一個字符是非數(shù)字(空格、+、-除外),那么就會被轉(zhuǎn)為NaN。 showImg(http...

    Moxmi 評論0 收藏0
  • 原生JS揭秘—看清JS繼承本質(zhì)

    摘要:繼承理論源于生活又高于生活在中繼承,和現(xiàn)實生活中繼承是相似的如兒子繼承父親財產(chǎn)子女的生理特性有父母的特性身高膚色性格等等只是一定比例上是這樣的,不是絕對的一樣中繼承方法有以下幾種本質(zhì)區(qū)別方法特別注意是本質(zhì)區(qū)別冒充繼承也稱之為借用構(gòu)造函數(shù)這種 JS繼承 理論源于生活、又高于生活 在JS中繼承,和現(xiàn)實生活中繼承是相似的 如:兒子繼承父親財產(chǎn)、子女的生理特性有父母的特性(身高、膚色、性格...

    sutaking 評論0 收藏0
  • 劍指Kubernetes 揭秘騰訊云PaaS技術(shù)選型策略

    摘要:騰訊云在年底決定開發(fā)容器產(chǎn)品隨后組建容器技術(shù)團隊并進行技術(shù)選型通過對不同編排工具的分析對比最終選擇作為容器編排引擎并且迅速在年初推出容器解決方案為用戶提供托管的一站式服務。但是騰訊云最終選擇了現(xiàn)在看來這個選擇無比正確。Kubernetes 很火,一大批互聯(lián)網(wǎng)公司早已領(lǐng)先一步,搭建起專有的 PaaS平臺,傳統(tǒng)企業(yè)們看到的 Kubernetes的趨勢,亦不甘落后,在試水的道上一路狂奔。雖然,Ku...

    icattlecoder 評論0 收藏0
  • 原生JS揭秘JS代碼底層運行原理

    摘要:是一種基于對象的動態(tài)弱類型腳本語言以下簡稱,是一種解釋型語言,和其他的編程語言不同,如等編譯型語言,這些語言在代碼執(zhí)行前會進行通篇編譯,先編譯成字節(jié)碼機器碼。然后在執(zhí)行。 JavaScript是一種基于對象的動態(tài)、弱類型腳本語言(以下簡稱JS),是一種解釋型語言,和其他的編程語言不同,如java/C++等編譯型語言,這些語言在代碼執(zhí)行前會進行通篇編譯,先編譯成字節(jié)碼(機器碼)。然后在執(zhí)...

    xiongzenghui 評論0 收藏0
  • 原生JS揭秘—同步與異步

    摘要:中任務分類同步異步同步任務異步任務中異步類型定時任務網(wǎng)絡請求回調(diào)函數(shù)事件綁定只能傳入一個參數(shù)未完待續(xù) JS中任務分類 同步 異步 同步任務 異步任務 JS中異步類型 定時任務 網(wǎng)絡請求 回調(diào)函數(shù) 事件綁定 Promise(resolve只能傳入一個參數(shù)) 未完待續(xù)...

    不知名網(wǎng)友 評論0 收藏0

發(fā)表評論

0條評論

Brenner

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<