摘要:到底是什么函數(shù)被調(diào)用時(shí)的位置是動態(tài)的箭頭函數(shù)不在此范圍,因?yàn)樗氖呛瘮?shù)定義時(shí)的上下文,是靜態(tài)的判斷規(guī)則如果是在中調(diào)用,則為新創(chuàng)建的對象通過,調(diào)用,是之前定的對象第一個(gè)參數(shù)注意若第一個(gè)參數(shù)是,則執(zhí)行第四條判斷規(guī)則在么某個(gè)上下文中調(diào)用,是該上下
this到底是什么?
函數(shù)被調(diào)用時(shí)的位置(是動態(tài)的!)
(箭頭函數(shù)不在此范圍,因?yàn)樗膖his是函數(shù)定義時(shí)的上下文,是靜態(tài)的!)
1.如果是在new中調(diào)用,this則為新創(chuàng)建的對象
2.通過call,apply調(diào)用,this是之前定的對象(第一個(gè)參數(shù))
(注意 若第一個(gè)參數(shù)是null,undefined則執(zhí)行第四條判斷規(guī)則)
3.在么某個(gè)上下文中調(diào)用,this是該上下文對象
4.上面3個(gè)都不是的話,this是全局對象(嚴(yán)格模式是undefined)
1.new(該函數(shù)使用new構(gòu)造調(diào)用了)
2.顯式(該函數(shù)顯示使用call,apply調(diào)用)
3.隱式(該函數(shù)為某個(gè)對象的屬性值,作為對象的屬性方法調(diào)用)
4.默認(rèn)(無特征,直接調(diào)用了)
看代碼吧~
new綁定function foo(a){ this.a = a; } var bar = new foo(2); console.log(bar.a); // 2顯式綁定
function foo(a){ this.a = a; } var obj = {a:2}; foo.call(obj); // 2隱式綁定
function foo(){ console.log(this.a); } var obj = { a: 2, foo: foo }; console.log(obj.foo); // 2 // trap 2or22??? function foo(){ console.log(this.a); } var obj1 = { a: 2, foo: foo }; var obj2 = { a: 22, obj1: obj1 }; obj2.obj1.foo(); // tip 函數(shù)foo是誰的屬性值呢?綁定默認(rèn)
function foo(){ console.log(this.a); } var a = 2; foo(); // 2常規(guī)考點(diǎn)~
// trap 0or1??? why? 如何打印另外一個(gè)值~ function foo(){ setTimeout(function(){ console.log(this.a); },1000); } var obj = {a:1}; var a = 0; foo.call(obj); // tip 包含this的函數(shù)究竟是在哪里被執(zhí)行的呢?0和1的區(qū)別在于?
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/93398.html
摘要:有三個(gè)重要組成部分和。參考小結(jié)函數(shù)中的是由調(diào)用函數(shù)的方式?jīng)Q定的。構(gòu)造函數(shù)中的當(dāng)構(gòu)造函數(shù)通過操作符來調(diào)用時(shí),表示正在創(chuàng)建的對象。情況沒有明確作用對象的情況下,通常為全局對象例如函數(shù)的回調(diào)函數(shù),它的就是全局對象。 一. this的來源 this是JavaScript的關(guān)鍵字,它最初應(yīng)該是從Java、C++等面向?qū)ο蟮恼Z言中借鑒來的。 比如,在Java中沒有函數(shù)只有方法,this只能用在類的...
摘要:匿名函數(shù)的執(zhí)行環(huán)境具有全局性,因此它的對象通常指向。如果對此有疑惑,可以看知乎上的答案知乎匿名函數(shù)的指向?yàn)槭裁词亲鳛閷ο蠓椒ǖ恼{(diào)用,指向該對象當(dāng)函數(shù)作為某個(gè)對象的方法調(diào)用時(shí),就指這個(gè)函數(shù)所在的對象。 因?yàn)槿粘9ぷ髦薪?jīng)常使用到this,而且在JavaScript中this的指向問題也很容易讓人混淆一部分知識。 這段時(shí)間翻閱了一些書籍也查閱了網(wǎng)上一些資料然后結(jié)合自己的經(jīng)驗(yàn),為了能讓自...
摘要:使用上一篇文章的例子來說明下自由變量進(jìn)階期深入淺出圖解作用域鏈和閉包訪問外部的今天是今天是其中既不是參數(shù),也不是局部變量,所以是自由變量。 (關(guān)注福利,關(guān)注本公眾號回復(fù)[資料]領(lǐng)取優(yōu)質(zhì)前端視頻,包括Vue、React、Node源碼和實(shí)戰(zhàn)、面試指導(dǎo)) 本周正式開始前端進(jìn)階的第二期,本周的主題是作用域閉包,今天是第7天。 本計(jì)劃一共28期,每期重點(diǎn)攻克一個(gè)面試重難點(diǎn),如果你還不了解本進(jìn)階計(jì)...
摘要:設(shè)計(jì)模式是以面向?qū)ο缶幊虨榛A(chǔ)的,的面向?qū)ο缶幊毯蛡鹘y(tǒng)的的面向?qū)ο缶幊逃行┎顒e,這讓我一開始接觸的時(shí)候感到十分痛苦,但是這只能靠自己慢慢積累慢慢思考。想繼續(xù)了解設(shè)計(jì)模式必須要先搞懂面向?qū)ο缶幊蹋駝t只會讓你自己更痛苦。 JavaScript 中的構(gòu)造函數(shù) 學(xué)習(xí)總結(jié)。知識只有分享才有存在的意義。 是時(shí)候替換你的 for 循環(huán)大法了~ 《小分享》JavaScript中數(shù)組的那些迭代方法~ ...
摘要:新建一個(gè)類該函數(shù)返回一個(gè)類的實(shí)例給函數(shù)傳入通過立即調(diào)用類構(gòu)造函數(shù)可以創(chuàng)建單例。派生類是指繼承自其它類的新類。在構(gòu)造函數(shù)中訪問之前要調(diào)用,負(fù)責(zé)初始化。在構(gòu)造函數(shù)中使用通常表示當(dāng)前的構(gòu)造函數(shù)名。 ES5中的近類結(jié)構(gòu) ES5以及之前的版本,沒有類的概念,但是聰明的JavaScript開發(fā)者,為了實(shí)現(xiàn)面向?qū)ο螅瑒?chuàng)建了特殊的近類結(jié)構(gòu)。 ES5中創(chuàng)建類的方法:新建一個(gè)構(gòu)造函數(shù),定義一個(gè)方法并且賦值...
閱讀 2405·2021-11-11 16:54
閱讀 1210·2021-09-22 15:23
閱讀 3653·2021-09-07 09:59
閱讀 2002·2021-09-02 15:41
閱讀 3290·2021-08-17 10:13
閱讀 3051·2019-08-30 15:53
閱讀 1241·2019-08-30 13:57
閱讀 1214·2019-08-29 15:16