摘要:在高級的技巧中會用來創(chuàng)建作用域安全的構(gòu)造函數(shù)。運算符希望左操作數(shù)是一個對象,右操作數(shù)表示對象的類。中對象的類似通過初始化它們的構(gòu)造函數(shù)來定義的。為了理解運算符是如何工作的,必須首先理解原型鏈原型鏈可作為的繼承機制。
在js高級的技巧中會用instanceof來創(chuàng)建作用域安全的構(gòu)造函數(shù)。
instanceof運算符希望左操作數(shù)是一個對象,右操作數(shù)表示對象的類。如果左側(cè)的對象是右側(cè)類的實例,則表達式返回true;否側(cè)返回false。Javascript中對象的類似通過初始化它們的構(gòu)造函數(shù)來定義的。這樣的話,instanceof的右操作數(shù)應(yīng)當(dāng)是一個函數(shù)。比如:
var d = new Date(); //通過計算Date()構(gòu)造函數(shù)來創(chuàng)建一個新對象 d instanceof Date; //計算結(jié)果為true,d是有Date()創(chuàng)建的 d instanceof Object; //計算結(jié)果為true,所有對象都是Object的實例 d instanceof Number; //計算結(jié)果為false,d不是一個Number對象 var a =[1,2,3]; //通過數(shù)組直接量的寫法創(chuàng)建一個數(shù)組 a instanceof Array; //計算結(jié)果為true,a是一個數(shù)組 a instanceof Object; //計算結(jié)果為true,所有數(shù)組都是對象 a instanceof RegExp; //計算結(jié)果為false,數(shù)組不是一個正則表達式
需要注意的是,所有對象都是Object的實例。但通過instanceof判斷一個對象是否是一個類的實例的時候,這個判斷也會包含對“父類”的檢測。如果instanceof的左操作數(shù)不是一個對象的話,instanceof返回false,如果右操作數(shù)不是一個函數(shù),則會拋出一個類型錯誤異常。
為了理解instanceof運算符是如何工作的,必須首先理解‘原型鏈’(protetype chain),原型鏈可作為Javascript的繼承機制。Ok,我們來看看表達式‘ person1 instanceof Person ’ javascript到底是怎么執(zhí)行的。
首先,Person 會先計算Person .protetype,找到其指向的原型鏈中的所有對象,然后在這些對象中查找person1 ,如果找到,則說明person1是Person 的一個實例,返回true,否側(cè)返回false。這其實就是判斷Person.prototype與person1的內(nèi)部指針[[prototype]]兩者引用是否相同。下圖展示了對象之間的關(guān)系:
以上是個人結(jié)合書本總結(jié),若有不對,請指正。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/85571.html
摘要:與此相對,強類型語言的類型之間不一定有隱式轉(zhuǎn)換。三為什么是弱類型弱類型相對于強類型來說類型檢查更不嚴(yán)格,比如說允許變量類型的隱式轉(zhuǎn)換,允許強制類型轉(zhuǎn)換等等。在中,加性運算符有大量的特殊行為。 從++[[]][+[]]+[+[]]==10?深入淺出弱類型JS的隱式轉(zhuǎn)換 本文純屬原創(chuàng)? 如有雷同? 純屬抄襲? 不甚榮幸! 歡迎轉(zhuǎn)載! 原文收錄在【我的GitHub博客】,覺得本文寫的不算爛的...
摘要:對于此處的類型都是實例后的對象,并不會深入識別他們的構(gòu)造函數(shù)這里不是數(shù)據(jù)類型。通過上面的判斷,我們知道它并不能滿足一些內(nèi)置構(gòu)造函數(shù)創(chuàng)建的偽類型。 在我的第一篇文章里,介紹過JS各大類型并使用typeof進行輸出查看.也有提到過每個函數(shù)都有一個自己的內(nèi)部屬性[[class]],這個class指的是js內(nèi)部分類.這個類的大致包括:數(shù)據(jù)類型和構(gòu)造函數(shù)這兩種。 JavaScript類型介紹 ...
摘要:深入之繼承的多種方式和優(yōu)缺點深入系列第十五篇,講解各種繼承方式和優(yōu)缺點。對于解釋型語言例如來說,通過詞法分析語法分析語法樹,就可以開始解釋執(zhí)行了。 JavaScript深入之繼承的多種方式和優(yōu)缺點 JavaScript深入系列第十五篇,講解JavaScript各種繼承方式和優(yōu)缺點。 寫在前面 本文講解JavaScript各種繼承方式和優(yōu)缺點。 但是注意: 這篇文章更像是筆記,哎,再讓我...
摘要:注意基本變量類型不是對象類型,只有基本包裝類型才是對象類型。至于顯示的原型,在里用屬性表示,這個是原型繼承的基礎(chǔ)知識,在這里就不在敘述了。 前言 如果你要開發(fā)一個復(fù)雜的產(chǎn)品,那么肯定少不了使用面向?qū)ο髾C制,當(dāng)然也避不開 Javascript 里面的繼承,instanceof 運算符是原生 Javascript 語言中用來判斷實例繼承的操作符。所以我們有必要深入理解該運算符! inst...
摘要:在標(biāo)簽中添加屬性,本質(zhì)上是跟在標(biāo)簽里面寫屬性時一樣的,所以屬性值最終都會編譯為字符串類型。這個節(jié)點包括很多,比如,以及一些方法等方法。一個對象有很多,該集合名字為,里面有其他以及,里面有很多。 一、變量類型和計算 JS中使用typeof能得到哪些類型 變量類型 值類型:變量本身就是含有賦予給它的數(shù)值的,它的變量本身及保存的數(shù)據(jù)都存儲在棧的內(nèi)存塊當(dāng)中 引用類型:引用類型當(dāng)然是分配到...
閱讀 647·2021-11-24 09:39
閱讀 3489·2019-08-30 15:53
閱讀 2528·2019-08-30 15:44
閱讀 3246·2019-08-30 12:54
閱讀 2216·2019-08-29 12:23
閱讀 3312·2019-08-26 14:05
閱讀 2113·2019-08-26 13:36
閱讀 3445·2019-08-26 13:33