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

資訊專欄INFORMATION COLUMN

捉摸不透的this到底是什么?

psychola / 1669人閱讀

摘要:前言中的重中之重,也是在面試中被問得最多的問題,在這里到底是什么我也時(shí)常疑惑于此,特用此文來整理思路理解并方便日后回顧。是什么看調(diào)用并轉(zhuǎn)換例子是看調(diào)用,是全局定義函數(shù),掛載在對(duì)象上,所以是。

前言

JS中的重中之重,也是在面試中被問得最多的問題,在這里this到底是什么?我也時(shí)常疑惑于此,特用此文來整理思路理解并方便日后回顧。

函數(shù)的調(diào)用

JS(ES5)里面有三種函數(shù)調(diào)用形式:

func(p1, p2) //等價(jià)于func.call(undefined, p1, p2)
obj.child.method(p1, p2) //等價(jià)于obj.child.method.call(obj.child, p1, p2)
func.call(context, p1, p2) 

把所有的調(diào)用轉(zhuǎn)換成call的形式后,this指的就是call后面的第一個(gè)參數(shù)。
特別注意,全局定義的函數(shù)轉(zhuǎn)換成call的形式后,雖然第一個(gè)參數(shù)為undefined,但是由于全局定義的函數(shù)都是掛載到window/global對(duì)象上的,所以this會(huì)指向window/global。

this是什么?

看調(diào)用并轉(zhuǎn)換

例子1

 function showName(){
     console.log(this); //this是window
 }
showName();//showName.call(undefined)

看調(diào)用,showName是全局定義函數(shù),掛載在window對(duì)象上,所以this是window。

例子2

var name="hello window!";
function testName () {
    var name="hello this!";
    console.log(this.name);
}
testName();//testName.call(undefined)

為什么log出來的不是"hello this!"而是"hello window!"呢?
同樣,testName也是掛載在window上的,所以testName函數(shù)在調(diào)用時(shí)this是window,
所以打出來的自然是window.name,也就是全局變量name的值"hello window!"而不是"hello this!"。

例子3

var obj={
    a:"哈哈哈",
    b:function(){
        var a="嘿嘿嘿";
        console.log(this.a);//"哈哈哈"
    }
};
obj.b();//obj.b.call(obj)

那么以上代碼為什么會(huì)打出"哈哈哈"呢?
顯然,這里的this是指obj,也就是會(huì)去找obj.a,所以打出的就是"哈哈哈"啦。

總結(jié)
fn()            this=>window/global
obj.fn()        this=>obj
fn.call(xxx)    this=>xxx
fn.apply(xxx)   this=>xxx
fn.bind(xxx)    this=>xxx
new Fn()        this=>新的對(duì)象
fn = () =>{}    this=>外面的this

方法:
1.看源碼中對(duì)應(yīng)的函數(shù)是怎么被 call 的(這是最靠譜的辦法)
2.看文檔
3.console.log(this)

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

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

相關(guān)文章

  • 令人捉摸透的云計(jì)算:像霧像雨又像風(fēng)

    摘要:據(jù)預(yù)測(cè),到年,大多數(shù)的企業(yè)應(yīng)用將被遷移到云中。在云計(jì)算的霧期更需要對(duì)云計(jì)算產(chǎn)業(yè)有一個(gè)清醒的認(rèn)識(shí),不要在最后隨著霧散去自己也隨霧而去。 從概念開始逐漸轉(zhuǎn)為應(yīng)用落地,各企業(yè)紛紛加入到云計(jì)算浪潮,國(guó)家也在大力扶植云計(jì)算產(chǎn)業(yè)。據(jù)預(yù)測(cè),到2020年,大多數(shù)的企業(yè)應(yīng)用將被遷移到云中。與此同時(shí),越來越多的應(yīng)用開發(fā)商也將把應(yīng)用開發(fā)、測(cè)試平臺(tái)遷移到云中?!   <冶硎?,以云計(jì)算為代表的新型計(jì)算機(jī)模式未來將成...

    VishKozus 評(píng)論0 收藏0
  • JavaScript 的This綁定方式導(dǎo)圖

    摘要:本文是對(duì)加深對(duì)的理解一文的導(dǎo)圖版翻譯中的是一個(gè)捉摸不透的東西,它很喜歡變化,很詭異。寫在后面的幾種綁定規(guī)則,歸根結(jié)底,的套路就是關(guān)于幾種模式的等價(jià)變換形式,知乎上面有大神解答,猛戳這最后是全圖附上思維導(dǎo)圖的下載鏈接去有道云筆記下載 本文是對(duì)《加深對(duì) JavaScript This 的理解》一文的導(dǎo)圖版翻譯 JS中的this是一個(gè)捉摸不透的東西,它很喜歡變化,很詭異。擁抱變化,接收詭異...

    lbool 評(píng)論0 收藏0
  • 再記面向?qū)ο?/b>

    摘要:實(shí)例對(duì)象與構(gòu)造函數(shù)的原型聯(lián)系是在創(chuàng)建實(shí)例時(shí)確定的,當(dāng)創(chuàng)建后更改原型對(duì)象并不改變之前創(chuàng)建的實(shí)例所關(guān)聯(lián)的原型對(duì)象,新創(chuàng)建的使用新的原型對(duì)象。 再記面向?qū)ο?函數(shù)和對(duì)象的聯(lián)系 先理一下函數(shù)的功能: 創(chuàng)建:可以通過字面量創(chuàng)建 可以賦值給變量、數(shù)組作為成員和其他的對(duì)象作為屬性 作為函數(shù)的參數(shù) 作為返回值 自身可以添加屬性 在上面列出的函數(shù)功能對(duì)象皆具有 詳細(xì)函數(shù)介紹 為什么介紹函數(shù)? 因?yàn)殚]...

    mochixuan 評(píng)論0 收藏0
  • javascript的this的理解

    摘要:的關(guān)鍵字總是讓人捉摸不透,關(guān)鍵字代表函數(shù)運(yùn)行時(shí),自動(dòng)生成的一個(gè)內(nèi)部對(duì)象,只能在函數(shù)內(nèi)部使用,因?yàn)楹瘮?shù)的調(diào)用場(chǎng)景不同,的指向也不同。其實(shí)只要理解語言的特性就很好理解。個(gè)人對(duì)中的關(guān)鍵字的理解如上,如有不正,望指正,謝謝。 javascript的this關(guān)鍵字總是讓人捉摸不透,this關(guān)鍵字代表函數(shù)運(yùn)行時(shí),自動(dòng)生成的一個(gè)內(nèi)部對(duì)象,只能在函數(shù)內(nèi)部使用,因?yàn)楹瘮?shù)的調(diào)用場(chǎng)景不同,this的指向也不...

    jimhs 評(píng)論0 收藏0
  • 現(xiàn)代JS名詞概念系列——函數(shù)的純潔性【龜速翻譯】

    摘要:原文函數(shù)的純潔性純函數(shù)非純函數(shù)副作用純函數(shù)一個(gè)函數(shù)返回的值只取決于他輸入的值,并且沒有副作用,那這個(gè)函數(shù)就是純函數(shù)。因此,純函數(shù)無法對(duì)它的父作用域作出任何修改。更多關(guān)于函數(shù)純潔性的資料 原文:Glossary of Modern JavaScript Concepts: Part 1 函數(shù)的純潔性:純函數(shù)、非純函數(shù)、副作用 純函數(shù) 一個(gè)函數(shù)返回的值只取決于他輸入的值,并且沒有副作用,那...

    you_De 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<