<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在JavaScript中‘this’關鍵字是一個非常重要的概念,然而許多的初學者們發現深度的理解它卻又十分困難,如果你正在或者將要被this折磨,那麼現在深呼吸放輕鬆點,你必須得知道實際上去理解‘this’這個關鍵字並不難;耐心的看完本文,相信你對‘this’會有更深的理解。下面我們將一起來討論‘this’關鍵字的工作原理。
'this'關鍵字是為每個執行上下文(每個函數)建立的一個特殊變數;所以一般來說,在使用'this'關鍵字的函數中,'this'永遠是取其所有者的值。換句話的意思就是它指向該函數的所有者。這樣聽起來很抽象吧,那麼你現在只要記住'this'關鍵字的值不是靜態的,所以它總是不一樣。它的值取決於函數是怎麼被呼叫的,只有在實際呼叫函數時才分配它的值。就比如我們將x=4;那麼x的值就是4,但是'this'關鍵字的值取決於函數的呼叫方式;所以現在我們來分析四種不同的呼叫函數的方式。
Example: this代表一個物件
const bruce={ name:'bruce', birthYear:2001, calcAge:function () { return 2022-this.birthYear } }; console.log(bruce.calcAge());//21`
在上面的bruce物件裡面有一個calcAge()函數,這個函數是一個被附加到了bruce物件裡面的函數。所以當我們呼叫一個方法的時候,calcAge()裡面的this將會指向這個物件;換句話來說,this所指的bruce這個物件正在呼叫這個方法。在程式碼的最後一行,我們呼叫了這個函數;在calcAge()函數裡面我們使用了this,那麼這個this的值應該是什麼呢?沒錯,這個this指的是bruce;所以this.birrhYear==bruce.birthYear==2001。
Example: 此時this=undefined
const calcAge=function(birthYear){ console.log(2022-birthYear); //檢視此函數中的this console.log(this); } calcAge(2001)
結果如下:
像這樣常規的呼叫某個函數,只是簡單的呼叫某個函數,並沒有將這個函數新增到任何物件上面;可以這樣說這個this沒有主人,就是this指的就是window 。但是在嚴格模式下全域性物件無法進行預設繫結,所以導致this只能繫結在undefined上。這就是this的預設繫結規則:
箭頭函數沒有自己的this關鍵字
Example:
//3.箭頭函數的呼叫 const calcAge= birthYear => { console.log(2022-birthYear); //檢視此函數中的this console.log(this); } calcAge()
執行結果:
因為箭頭函數沒有this,所以在箭頭函數裡面的this是它外層作用域裡面的非箭頭函數的this,而本例中外層作用域是window,所以這裡的this指的是window
那麼此時的this將會指向處理程式函數所附加到的DOM元素
這就意味著this關鍵字不會簡單的指向在我們編寫方法的物件上面。
在第一種函數呼叫的方式中,因為bruce是呼叫calaAge()方法的物件,所以此時this是bruce; 那麼現在建立一個新物件:
const lucy={ birthYear:2006, }
我們都知道函數只是一個值,所以我們可以這樣:
const lucy={ birthYear:2006, } lucy.calcAge=bruce.calcAge console.log(lucy);
結果:
現在lucy裡面也有了一個calcAge()方法,我們再來執行lucy.calcAge()
const lucy={ birthYear:2006, } lucy.calcAge=bruce.calcAge console.log(lucy); lucy.calcAge()
結果為:
這就說明lucy物件呼叫calcAge()方法時,此時函數calcAge()方法裡面的this指向的是lucy, 即呼叫該方法的物件。所以this關鍵字如上面所說,它不是靜態的,而是取決於函數的呼叫方式。
現在我們來定義一個常數y,並將bruce.calcAge()函數賦給它
const y=bruce.calcAge y()
結果為:
那麼此時y()只是作為一個普通函數來進行呼叫,this是window
this關鍵字是一個讓許多初學者感到困惑的東西,但是總的來說:
1.如果函數是以普通函數(非建構函式)的形式呼叫,this指的永遠都是window
2.如果函數是以方法的形式呼叫,this就是呼叫方法的那個物件
到此這篇關於js中this關鍵字的文章就介紹到這了,更多相關js中this關鍵字內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45