摘要:到底是什么函數(shù)被調(diào)用時(shí)的位置是動(dòng)態(tài)的箭頭函數(shù)不在此范圍,因?yàn)樗氖呛瘮?shù)定義時(shí)的上下文,是靜態(tài)的判斷規(guī)則如果是在中調(diào)用,則為新創(chuàng)建的對(duì)象通過(guò),調(diào)用,是之前定的對(duì)象第一個(gè)參數(shù)注意若第一個(gè)參數(shù)是,則執(zhí)行第四條判斷規(guī)則在么某個(gè)上下文中調(diào)用,是該上下
this到底是什么?
函數(shù)被調(diào)用時(shí)的位置(是動(dòng)態(tài)的?。?br>(箭頭函數(shù)不在此范圍,因?yàn)樗膖his是函數(shù)定義時(shí)的上下文,是靜態(tài)的!)
判斷規(guī)則1.如果是在new中調(diào)用,this則為新創(chuàng)建的對(duì)象
2.通過(guò)call,apply調(diào)用,this是之前定的對(duì)象(第一個(gè)參數(shù))
(注意 若第一個(gè)參數(shù)是null,undefined則執(zhí)行第四條判斷規(guī)則)
3.在么某個(gè)上下文中調(diào)用,this是該上下文對(duì)象
4.上面3個(gè)都不是的話,this是全局對(duì)象(嚴(yán)格模式是undefined)
1.new(該函數(shù)使用new構(gòu)造調(diào)用了)
2.顯式(該函數(shù)顯示使用call,apply調(diào)用)
3.隱式(該函數(shù)為某個(gè)對(duì)象的屬性值,作為對(duì)象的屬性方法調(diào)用)
4.默認(rèn)(無(wú)特征,直接調(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是誰(shuí)的屬性值呢?綁定默認(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)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/93398.html
摘要:有三個(gè)重要組成部分和。參考小結(jié)函數(shù)中的是由調(diào)用函數(shù)的方式?jīng)Q定的。構(gòu)造函數(shù)中的當(dāng)構(gòu)造函數(shù)通過(guò)操作符來(lái)調(diào)用時(shí),表示正在創(chuàng)建的對(duì)象。情況沒(méi)有明確作用對(duì)象的情況下,通常為全局對(duì)象例如函數(shù)的回調(diào)函數(shù),它的就是全局對(duì)象。 一. this的來(lái)源 this是JavaScript的關(guān)鍵字,它最初應(yīng)該是從Java、C++等面向?qū)ο蟮恼Z(yǔ)言中借鑒來(lái)的。 比如,在Java中沒(méi)有函數(shù)只有方法,this只能用在類的...
摘要:匿名函數(shù)的執(zhí)行環(huán)境具有全局性,因此它的對(duì)象通常指向。如果對(duì)此有疑惑,可以看知乎上的答案知乎匿名函數(shù)的指向?yàn)槭裁词亲鳛閷?duì)象方法的調(diào)用,指向該對(duì)象當(dāng)函數(shù)作為某個(gè)對(duì)象的方法調(diào)用時(shí),就指這個(gè)函數(shù)所在的對(duì)象。 因?yàn)槿粘9ぷ髦薪?jīng)常使用到this,而且在JavaScript中this的指向問(wèn)題也很容易讓人混淆一部分知識(shí)。 這段時(shí)間翻閱了一些書籍也查閱了網(wǎng)上一些資料然后結(jié)合自己的經(jīng)驗(yàn),為了能讓自...
摘要:使用上一篇文章的例子來(lái)說(shuō)明下自由變量進(jìn)階期深入淺出圖解作用域鏈和閉包訪問(wèn)外部的今天是今天是其中既不是參數(shù),也不是局部變量,所以是自由變量。 (關(guān)注福利,關(guān)注本公眾號(hào)回復(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ū)ο缶幊?,否則只會(huì)讓你自己更痛苦。 JavaScript 中的構(gòu)造函數(shù) 學(xué)習(xí)總結(jié)。知識(shí)只有分享才有存在的意義。 是時(shí)候替換你的 for 循環(huán)大法了~ 《小分享》JavaScript中數(shù)組的那些迭代方法~ ...
摘要:新建一個(gè)類該函數(shù)返回一個(gè)類的實(shí)例給函數(shù)傳入通過(guò)立即調(diào)用類構(gòu)造函數(shù)可以創(chuàng)建單例。派生類是指繼承自其它類的新類。在構(gòu)造函數(shù)中訪問(wèn)之前要調(diào)用,負(fù)責(zé)初始化。在構(gòu)造函數(shù)中使用通常表示當(dāng)前的構(gòu)造函數(shù)名。 ES5中的近類結(jié)構(gòu) ES5以及之前的版本,沒(méi)有類的概念,但是聰明的JavaScript開發(fā)者,為了實(shí)現(xiàn)面向?qū)ο?,?chuàng)建了特殊的近類結(jié)構(gòu)。 ES5中創(chuàng)建類的方法:新建一個(gè)構(gòu)造函數(shù),定義一個(gè)方法并且賦值...
閱讀 2671·2021-11-11 16:54
閱讀 1371·2021-09-22 15:23
閱讀 3827·2021-09-07 09:59
閱讀 2267·2021-09-02 15:41
閱讀 3436·2021-08-17 10:13
閱讀 3249·2019-08-30 15:53
閱讀 1375·2019-08-30 13:57
閱讀 1362·2019-08-29 15:16