深入理解javascript原型和閉包(5)——instanceof
對於值類型來說,可以用typeof判斷,但typeof判斷引用類型的時候返回值只有object/function,並不知道到底是哪一個。這個時候就要用到instance。例如
上圖中,f1是被Foo函數創建得,但是“f1 instanceof Object”為什麽是true呢?
至於為什麽過會兒再說,先說下instanceof判斷的規則。根據以上代碼看下圖:
instance運算符的第一個變量是一個對象,暫時稱為A;第二個變量一般是一個函數,暫時稱為B。
instance的判斷規則是:沿著A的_proto_這條線來找,同時沿著B的prototype這條線來找,如果兩條線能找到同一個引用,即同一個對象,那麽久返回true,如果找到終點都沒有重合則返回false。
根據上面的規則,就可以看到“f1 instanceof Object“”都指向Object.prototype,因此返回true。
通過上面的規則,可以解釋更多怪異的現象,例如:
從上面圖中可以看出,最終都是指向一個地方。
instance表示的就是一種繼承關系,或者原型鏈的結構。
深入理解javascript原型和閉包(5)——instanceof
相關推薦
深入理解javascript原型和閉包(5)——instanceof
怪異 都是 ava type col function 深入理解java 為什麽 bject 對於值類型來說,可以用typeof判斷,但typeof判斷引用類型的時候返回值只有object/function,並不知道到底是哪一個。這個時候就要用到instance。例如 上
深入理解javascript原型和閉包(轉)
原型鏈 面向 type www. 作用域 url tle das 經歷 深入理解javascript原型和閉包(完結) 說明: 該教程繞開了javascript的一些基本的語法知識,直接講解javascript中最難理解的兩個部分,也是和其他主流面向對
深入理解javascript原型和閉包(3)——prototype原型
scrip 理解 隱藏 函數 col java 再看 深入理解java blog 上文中提到對象是函數創建得,而函數也是一種對象。對象就是屬性的集合,沒有方法。 每個函數都有一個屬性——prototype。 這個prototype的屬性值是一個對象(屬性的集合),默認有一個
深入理解javascript原型和閉包(12)——閉包
執行環境 分享圖片 script com 活動 時有 mage ava 五步 閉包的官方定義時有權訪問另一個函數作用域中的變量的函數。 閉包有兩種用法:函數作為返回值,函數作為參數傳遞 第一:函數作為返回值 上面代碼中,bar函數作為fn函數的返回值,賦值給了變量f1,因
深入理解javascript原型和閉包(14)——從【自由變數】到【作用域鏈】
https://www.cnblogs.com/wangfupeng1988/p/3994065.html 重點: var x = 10; function fn(){ console.log(x); } function show(f){ var x = 20; f();
教程推薦:深入理解javascript原型和閉包(完結)
分享一些乾貨…… 說明: 該教程繞開了javascript的一些基本的語法知識,直接講解javascript中最難理解的兩個部分,也是和其他主流面嚮物件語言區別最大的兩個部分——原型和閉包,當然,肯定少不了原型鏈和作用域鏈。幫你揭開javascript最神祕的面紗。 為什麼要偏偏
深入理解javascript原型和閉包(完結)
https://www.cnblogs.com/wangfupeng1988/p/3977924.html 說明: 該教程繞開了javascript的一些基本的語法知識,直接講解javascript中最難理解的兩個部分,也是和其他主流面嚮物件語言區別最大的兩個部分——原型和閉包,當然,肯
深入理解javascript原型和閉包(15)——閉包
http://www.cnblogs.com/wangfupeng1988/p/3994065.html 前面提到的上下文環境和作用域的知識,除了瞭解這些知識之外,還是理解閉包的基礎。 至於“閉包”這個詞的概念的文字描述,確實不好解釋,我看過很多遍,但是現在還是記不
深入理解javascript原型和閉包(1)——一切都是對象
更新 心理 兩個 生活 更多 fine blank 下回 weibo “一切都是對象”這句話的重點在於如何去理解“對象”這個概念。 ——當然,也不是所有的都是對象,值類型就不是對象。 首先咱們還是先看看javascript中一個常用的運算符——typeof。typeof
深入理解javascript原型和閉包(6)——繼承
reac __proto__ 區分 深入 app mooc 屬性 lan 裏來 為何用“繼承”為標題,而不用“原型鏈”? 原型鏈如果解釋清楚了很容易理解,不會與常用的java/C#產生混淆。而“繼承”確實常用面向對象語言中最基本的概念,但是java中的繼承與javascri
【學習筆記】深入理解js原型和閉包(3)——prototype原型
既typeof之後的另一位老朋友! prototype也是我們的老朋友,即使不瞭解的人,也應該都聽過它的大名。如果它還是您的新朋友,我估計您也是javascript的新朋友。 在咱們的第一節(深入理解js原型和閉包(1)——一切皆是物件)中說道,函式也是一種物件。他也是屬性的集合,你也可以
【學習筆記】深入理解js原型和閉包(8)——簡述【執行上下文】上
什麼是“執行上下文”(也叫做“執行上下文環境”)?暫且不下定義,先看一段程式碼: 第一句報錯,a未定義,很正常。第二句、第三句輸出都是undefined,說明瀏覽器在執行console.log(a)時,已經知道了a是undefined,但卻不知道a是10(第三句中)。 在一段js程式碼拿過來真正一句一
【學習筆記】深入理解js原型和閉包(9)—— 簡述【執行上下文】下
繼續上一篇文章(https://www.cnblogs.com/lauzhishuai/p/10078231.html)的內容。 上一篇我們講到在全域性環境下的程式碼段中,執行上下文環境中有如何資料: 變數、函式表示式——變數宣告,預設賦值為undefined; this——賦值; 函式宣告
【學習筆記】深入理解js原型和閉包(11)——執行上下文棧
繼續上文的內容。 執行全域性程式碼時,會產生一個執行上下文環境,每次呼叫函式都又會產生執行上下文環境。當函式呼叫完成時,這個上下文環境以及其中的資料都會被消除,再重新回到全域性上下文環境。處於活動狀態的執行上下文環境只有一個。 其實這是一個壓棧出棧的過程——執行上下文棧。如下圖: 可
【學習筆記】深入理解js原型和閉包(12)——簡介【作用域】
提到作用域,有一句話大家(有js開發經驗者)可能比較熟悉:“javascript沒有塊級作用域”。所謂“塊”,就是大括號“{}”中間的語句。例如if語句: 再比如for語句: 所以,我們在編寫程式碼的時候,不要在“塊”裡面宣告變數,要在程式碼的一開始就宣告好了。以避免發生歧義。如: &nbs
【學習筆記】深入理解js原型和閉包(15)——閉包
前面提到的上下文環境和作用域的知識,除了瞭解這些知識之外,還是理解閉包的基礎。 至於“閉包”這個詞的概念的文字描述,確實不好解釋,我看過很多遍,但是現在還是記不住。 但是你只需要知道應用的兩種情況即可——函式作為返回值,函式作為引數傳遞。 第一,函式作為返回值 如上程式碼,bar函式作為返回值,賦
【學習筆記】深入理解js原型和閉包(17)——補this
本文對《深入理解js原型和閉包(10)——this》一篇進行補充,原文連結:https://www.cnblogs.com/lauzhishuai/p/10078307.html 原文中,講解了在javascript中this的各個情況,寫完之後發現還落下一種情況,就此補充。 原文中thi
【學習筆記】深入理解js原型和閉包(18)——補充:上下文環境和作用域的關係
本系列用了大量的篇幅講解了上下文環境和作用域,有些人反映這兩個是一回兒事。本文就用一個小例子來說明一下,作用域和上下文環境絕對不是一回事兒。 再說明之前,咱們先用簡單的語言來概括一下這兩個的區別。 00 上下文環境: 可以理解為一個看不見摸不著的物件(有若干個屬性),雖然看不見
深入理解javascript原型和閉包
函式就是物件的一種,因為通過instanceof函式可以判斷。函式就是物件的一種,因為通過instanceof函式可以判斷。 var fn = function () { }; console.log(fn instanceof Object); // tru
python的namespace和閉包(closure)
引用 能夠 繼續 local 沒有 都是 自由 不存在 logs 在討論閉包之前,先總結一下python的命名空間namespace,一般的語言都是通過namespace來識別名字標識,無論是變量,對象,函數等等。python劃分3個名字空間層次,local:局部,標識為當