摘要:里,的值隨著一個函數(shù)被調(diào)用情況的不同而不同。作為構(gòu)造函數(shù)被調(diào)用指用關(guān)鍵字進(jìn)行調(diào)用生成一個對象實(shí)例子的情況,這時候生成的實(shí)例對象在我們用調(diào)用一個構(gòu)造函數(shù)時,發(fā)生了三件事創(chuàng)建了一個新的空對象。在第一步創(chuàng)建的這個空對象作為傳給這個構(gòu)造函數(shù)。
在JavaScript被調(diào)用的時候,除了可見的行參被傳入方法體之外,this也被隱形地傳進(jìn)去了。所以,從這點(diǎn)也再次說明JavaScript的this的值完全取決于函數(shù)被調(diào)用時候的上下文,而不是像java的this是在聲明的時候確定的。
JavaScript里,this的值隨著一個函數(shù)被調(diào)用情況的不同而不同。而一個函數(shù)有4種被調(diào)用的情況,也就是說this的值有4種,那先來看看有哪四種調(diào)用函數(shù)的方法:
1: 作為方法被調(diào)用
當(dāng)一個函數(shù)被賦給一個對象的屬性,并引用該屬性進(jìn)行調(diào)用時,this === the object
var func = function(){ return this.a; } var obj = { a: 10, name: "hehe", fn: func } this.a = 20; obj.fn();//10
當(dāng)我們執(zhí)行到func時,在右邊的調(diào)試工具欄可以看到this是我們的obj這個對象。
2: 作為一個函數(shù)被調(diào)用
只最常用的用()進(jìn)行調(diào)用的情況,這時候this === Window
先來看一段代碼:
var func = function(){ var a = 10; return this.a; } var a = 20; func();//結(jié)果是20而不是10
當(dāng)我們執(zhí)行到func時,這時候的this是全局對象Window,那this.a自然就是全局變量a(20),而不是定義在func內(nèi)部的a(10)。
其實(shí)第二種情況是第一種情況的特例,這里的對象是全局對象Window,這個方法是在Window上調(diào)用的,那this自然也就是Window了。
3: 作為構(gòu)造函數(shù)被調(diào)用
指用new關(guān)鍵字進(jìn)行調(diào)用生成一個對象實(shí)例子的情況,這時候this === 生成的實(shí)例對象
function Fruit(){ this.func = function(){return this} } var apple = new Fruit(); var orange = new Fruit(); apple.func() === apple; //true orange.func() === orange; // ture
在我們用new調(diào)用一個構(gòu)造函數(shù)時,發(fā)生了三件事:
1: 創(chuàng)建了一個新的空對象。 2: 在第一步創(chuàng)建的這個空對象作為this傳給這個構(gòu)造函數(shù)。 (每一個函數(shù)被調(diào)用時,都隱式地傳入一個this) 3: 如果沒有顯示的返回值,新創(chuàng)建的這個對象,就會作為構(gòu)造器函數(shù)的返回值進(jìn)行返回。
第三點(diǎn)解釋了為什么我們可以在apple上調(diào)用func這個方法,第二點(diǎn)解釋了為什么appl.func()的執(zhí)行結(jié)果等于apple.
4: 使用apply()和call()方法進(jìn)行調(diào)用
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/83514.html
摘要:理解的函數(shù)基礎(chǔ)要搞好深入淺出原型使用原型模型,雖然這經(jīng)常被當(dāng)作缺點(diǎn)提及,但是只要善于運(yùn)用,其實(shí)基于原型的繼承模型比傳統(tǒng)的類繼承還要強(qiáng)大。中文指南基本操作指南二繼續(xù)熟悉的幾對方法,包括,,。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。 怎樣使用 this 因?yàn)楸救藢儆趥吻岸耍虼宋闹兄豢炊?8 成左右,希望能夠給大家?guī)韼椭?...(據(jù)說是阿里的前端妹子寫的) this 的值到底...
摘要:第四點(diǎn)也要著重講下,記住構(gòu)造函數(shù)被操作,要讓正常作用最好不能在構(gòu)造函數(shù)里 4) this、new、call和apply的相關(guān)問題 講解this指針的原理是個很復(fù)雜的問題,如果我們從javascript里this的實(shí)現(xiàn)機(jī)制來說明this,很多朋友可能會越來越糊涂,因此本篇打算換一個思路從應(yīng)用的角度來講解this指針,從這個角度理解this指針更加有現(xiàn)實(shí)意義。 下面我們看看在ja...
摘要:所以相同點(diǎn)是,在全局范圍內(nèi),全局變量終究是屬于老大的。只生效一次引入了。只生效一次在箭頭函數(shù)中,與封閉詞法環(huán)境的保持一致。我通常把這些原始函數(shù)叫做構(gòu)造函數(shù)。在里面你可以嵌套函數(shù),也就是你可以在函數(shù)里面定義函數(shù)。 showImg(https://img-blog.csdnimg.cn/20190522000008399.jpg?x-oss-process=image/watermark,...
摘要:中函數(shù)的調(diào)用有以下幾種方式作為對象方法調(diào)用,作為函數(shù)調(diào)用,作為構(gòu)造函數(shù)調(diào)用,和使用或調(diào)用。作為構(gòu)造函數(shù)調(diào)用中的構(gòu)造函數(shù)也很特殊,構(gòu)造函數(shù),其實(shí)就是通過這個函數(shù)生成一個新對象,這時候的就會指向這個新對象如果不使用調(diào)用,則和普通函數(shù)一樣。 this 是 JavaScript 比較特殊的關(guān)鍵字,本文將深入淺出的分析其在不同情況下的含義,可以這樣說,正確掌握了 JavaScript 中的 th...
摘要:和類在開始時遇到類組件,只是需要有關(guān)類的基礎(chǔ)。畢竟,中的條件呈現(xiàn)僅再次顯示大多數(shù)是而不是特定的任何內(nèi)容。 在我的研討會期間,更多的材料是關(guān)于JavaScript而不是React。其中大部分歸結(jié)為JavaScript ES6以及功能和語法,但也包括三元運(yùn)算符,語言中的簡寫版本,此對象,JavaScript內(nèi)置函數(shù)(map,reduce,filter)或更常識性的概念,如:可組合性,可重用...
閱讀 2347·2019-08-30 15:44
閱讀 1272·2019-08-30 13:01
閱讀 3314·2019-08-30 11:22
閱讀 3099·2019-08-29 15:23
閱讀 1621·2019-08-29 12:22
閱讀 3380·2019-08-26 13:58
閱讀 3448·2019-08-26 12:17
閱讀 3487·2019-08-26 12:16