JavaScript 的 this 原理是什麼?

時間 2021-05-07 09:40:33

1樓:

this不是什麼從原理性的產物,它僅僅是js語法中的乙個指標。只需要清楚3件事兒,誰指的,指到誰,指了個什麼東西過去。

玩過奧莉安娜沒有,對就是發條,它的魔偶就是那個球,是不是打傷害得先指哪才能打哪。那個球就是this,球在哪,傷害才會落在哪。

我看到很多人學js兩眼發白(包括科班生),乙個this看十幾篇文章也搞不懂,先問問自己是不是想搞學術的那類人,不是的話這種糙生的理解足以應付面試和日常開發了。

2樓:quadrum

看了幾個回答,感覺大部分情況下 js 的 this 和 Python 的 self 很像。只是 Python 的 self 是顯式宣告,而 js 的 this 是隱式宣告。在不通過物件呼叫的時候,Python 的 self 需要顯式傳入,而 js 的是 undefined

3樓:行甫

我的答案可能不適合沒有電腦科學基礎的新人看,但建議新人看,應該有助於學習路線的啟發。

我詢問過一起走前端路線同學,一致認為this不是乙個難點。甚至告訴不走前端路線的同學「this指向這個函式的呼叫者」,他們也能極快速度理解,不需要刻意死記硬背各種現象,能非常精準的判斷出this指向。

不說「編譯原理」,只要會一點c語言,了解一些js引擎的堆疊設計和實現原理,this指向應該了然於胸。

4樓:iChengbo

5樓:

去餐館吃飯,你拿著選單對老闆說,我要點這個,這個和這個。

----- 沒有了選單(作用域),這個是哪個?

js中的this, 和任何一門語言的『這個』並無區別。

6樓:南宮杞人

this在js裡本質是乙個帶預設值功能的函式引數。

我們需要了解預設值規則和它要解決的問題就好了。

它可以算是語法糖,沒它也可以,有它更方便。

7樓:華不二

以前入門時

每學乙個稍要理解的概念我都會自己寫一些demo來加深理解驗證,最後內化成自己的東西越簡單明瞭越好記越有效,否則每次忘記又要重新看一遍長篇大論理解過程,真的太低效。後來去面試做筆試時發現有不少東西與之類似,欣悅。

說回主題this

第一階段內化為「 誰呼叫,就是誰」

第二階段內化為 「所謂this,不就是context嗎?」

太宰治的「所謂人間,不就是你嗎?」

8樓:Dr.D

記住,this指的是當前方法的呼叫者,就這麼簡單,如果乙個方法沒有呼叫者,自執行的話,this是window物件,千萬不要把他想複雜了,不然會越來越亂,影響你學習的

9樓:

函式的上下文不附帶 this,這是JS與其它部分語言的區別。

結束。總之,不清楚 this 是誰,那就別寫。(之前太多廢話)

10樓:我叫粘畝司

this就像乙個箱子,裡面裝的都是變數和函式。而每乙個函式又是乙個箱子,函式箱子裡又可以裝另外的變數和函式。

當然以上的比喻有很多不夠嚴謹的地方,目的只是描述this在js裡的大致角色。

簡而言之,this在js中指的就是execution context,也就是scope。

在js中也有很多關於this執行的規則。比如:

在函式內this單指全域性變數,也就是window物件;當函式是以物件的身份被呼叫的時候,函式內this指向該物件本身(類似於python中的self);在乙個方法屬性中執行this則是在訪問封裝該方法的物件變數;等等。。。

11樓:三顆牙

看了其他優秀的回答。這要看題主想表達什麼了,理解這個對日常工作使用this沒什麼用,就好比一直在糾結茴字的幾種寫法;但是能了解js的作用域和this是怎麼在js記憶體棧中發揮作用的對於加深內功是有用的,這方面的能力對於你去理解其他語言設計都有幫助吧

12樓:胖虎

這樣講你肯定能聽懂

我們定義乙個函式a 這個函式沒有直接呼叫者的時候this是指向windows的為什麼呢?其實這個函式真正的寫法是這樣的

windows.function a (){console.log("我是函式a")

我們平時寫方法都是直接寫function,只是省略了這個window,當我們的函式有了具體的呼叫者那麼它的this 指向直接的呼叫者。

es6 其中有個新特性叫做箭頭函式,箭頭函式本身是沒有this的它的this指向和作用域有關指向最近作用域的父級

可以好好看看作用域相關的知識。

13樓:Echo

this det./pron. (指較近的人或事物)這,這個;(指已提到過的人或事物)這;(介紹人或展示事物時用)這,這樣

a.fun 這個指定了this。小明打球,那就是指向小明咯fun this指向當前環境。 打球吧,就是當前所有人咯。瀏覽器環境就是windows了。

Fun.call(obj) 這個是規定this。設this=obj,this打球,就是obj打球

14樓:請叫我張先森

function func()

a.func() 那麼this指向 a

func() 那麼this指向 window能理解嗎?

javascript原型的問題?

yibuyisheng 如果我記得沒錯的話,在ObjectiveC中,對物件成員的訪問被稱為傳送訊息。此處 例項.屬性 的形式在內部也是乙個傳送訊息的過程。也就是說,給例項傳送乙個訊息說 我想訪問你上面的某個屬性!例項收到這個訊息之後,就開始按照原型鏈的屬性查詢規則去查詢相應的屬性,找到就返回相應的...

JavaScript會被Vue Angular React取代嗎

gunters 不會!這個問題有點問題。VAR是基於JS的,即便沒人用原生JS,全部改用VAR,其實JS也沒有被取代。原本沒落的JS,這些年JS社群比較熱鬧,先進的框架層出不窮。每年,都有一種新的框架甚至語言解決了之前的痛苦,於是大家趨之若鶩。一年後,大家發現這個新的框架似乎有解決不了的某些問題。次...

javascript 關於 propertyIsEnumerable 的問題?

你應該用 arr.propertyIsEnumerable length arr.propertyIsEnumerable length arr.propertyIsEnumerable window.length arr.propertyIsEnumerable 0 假設你所在的視窗沒有 fram...