摘要:這個(gè)就指向了類(lèi)型的共有方法庫(kù)這個(gè)就表示類(lèi)型的共有方法庫(kù)里所有的方法簡(jiǎn)單類(lèi)型和對(duì)象諸如像下面代碼所示,就是簡(jiǎn)單類(lèi)型的簡(jiǎn)單聲明。
標(biāo)題中,__proto__的__是由兩個(gè)_組成的
共有屬性(原型)這個(gè)概念就是,一段代碼有諸多個(gè)對(duì)象,對(duì)象有很多的屬性、方法,把這么多個(gè)對(duì)象相同的屬性、方法提取出來(lái),弄在一個(gè)新對(duì)象里,大家一起用。對(duì)象里就只要存儲(chǔ)新對(duì)象的地址,到時(shí)候要用到這些屬性、方法了,再調(diào)出來(lái)使用。
看下圖,簡(jiǎn)易內(nèi)存圖。左邊原始代碼區(qū)里聲明了新對(duì)象O1,var O1=new Object(),右邊Heap里存儲(chǔ)(從左往右看第一個(gè)箭頭的右邊都是Heap,沒(méi)有Stack)。左邊原始代碼區(qū)里又聲明了新對(duì)象O2,var O2=new Object(),右邊Heap里存儲(chǔ)。作為一個(gè)對(duì)象,有些方法是都有的,比如toString(),valueOf等,所以提取出來(lái),放在共有屬性的Heap里,地址隨機(jī)為A100,那么O1,O2的Heap里就存放共有屬性的地址__proto__:A100。你寫(xiě)代碼O1.toString(),就順著上面的箭頭找到O1的Heap,找一遍沒(méi)有,又找到__proto__里好像有東西,就找到了共有屬性的Heap,里面有toString()方法。
個(gè)人理解,__proto__是個(gè)地址,用于指向另一個(gè)對(duì)象,比如某個(gè)共有方法庫(kù)。prototype就是本個(gè)對(duì)象所有方法的集合。
var a=new Number(1); a.__proto__ //這個(gè)就指向了Number類(lèi)型的共有方法庫(kù) a.__proto__.prototype //這個(gè)就表示Number類(lèi)型的共有方法庫(kù)里所有的方法簡(jiǎn)單類(lèi)型和對(duì)象
諸如像下面代碼所示,就是簡(jiǎn)單類(lèi)型的簡(jiǎn)單聲明。這樣子聲明的變量只包含簡(jiǎn)單類(lèi)型值,沒(méi)有別的像toString(),valueOf,toFixed......等等的方法
var a=1; var b="abc"; var c=true;
諸如像下面代碼所示,就是簡(jiǎn)單類(lèi)型的對(duì)象聲明。這樣子聲明的變量除了包含簡(jiǎn)單類(lèi)型值,還自帶了一些類(lèi)型專(zhuān)屬方法和對(duì)象方法等等的方法
var a=new Number(1); var b=new String("abc"); var c=new Boolean(true);
類(lèi)型專(zhuān)屬方法和對(duì)象方法就是上面講的共有屬性(原型)。這就好像,所有的Number類(lèi)型有自己的方法庫(kù),所有的String類(lèi)型有自己的方法庫(kù),所有的Boolean類(lèi)型有自己的方法庫(kù),這些都是對(duì)象,所以最后所有Object類(lèi)型有一個(gè)最最通用的方法庫(kù)。畫(huà)成圖如下圖。
S1,S2 → String類(lèi)型 → 自己的Heap → String類(lèi)型方法庫(kù) → Object方法庫(kù)
n1,n2 → Number類(lèi)型 → 自己的Heap → Number類(lèi)型方法庫(kù) → Object方法庫(kù)
b1,b2 → Boolean類(lèi)型 → 自己的Heap → Boolean類(lèi)型方法庫(kù) → Object方法庫(kù)
o1,o2 → Object類(lèi)型 → 自己的Heap → Object方法庫(kù)
簡(jiǎn)單聲明和對(duì)象聲明的區(qū)別講道理,用起來(lái)沒(méi)啥區(qū)別,方法該調(diào)用的調(diào)用,屬性該有的都一樣有。但實(shí)際上,是JavaScript自己做了處理的,方便了開(kāi)發(fā)人員。
你先用簡(jiǎn)單聲明聲明一個(gè)簡(jiǎn)單類(lèi)型var n=1
簡(jiǎn)單類(lèi)型缺點(diǎn)是,它就是一個(gè)值,啥也沒(méi)有,想對(duì)它進(jìn)行各種操作,不行
怎么辦!這樣也太傻太沒(méi)用了吧??!那,臨時(shí)轉(zhuǎn)換下吧~~~
臨時(shí)轉(zhuǎn)換:
當(dāng)你寫(xiě)下這樣的代碼var b=n.toString();
建立臨時(shí)變量temp,var temp=new Number(n)
這樣就可以調(diào)用temp的toString()方法了,temp.toString()
好了,臨時(shí)轉(zhuǎn)換好了,正確返回了n.toString()
最后刪除臨時(shí)變量temp,結(jié)束,temp來(lái)了、做了、走了
再來(lái)看看內(nèi)存圖
左邊原始代碼區(qū),簡(jiǎn)單聲明變量var n=1;,中間Stack里存儲(chǔ)n的值
調(diào)用方法n.toString(),Stack里建立新變量temp,這是個(gè)對(duì)象,所以Heap里存儲(chǔ)temp的所有內(nèi)容,Stack里存儲(chǔ)Heap地址ADDR 6
這樣n.toString(),就等于temp.toString()
返回temp.toString()后,temp就被磨滅了,Heap里的內(nèi)容也隨之消失
Number類(lèi)型
兩種聲明方式
var a=1; var b=new Number(1);
Number類(lèi)型專(zhuān)屬方法
聲明了一個(gè)變量,輸出變量后看到,里面就只有一個(gè)東西__proto__,這是個(gè)地址,指向Number類(lèi)型公用的方法庫(kù)
點(diǎn)開(kāi)__proto__,看到的就是Number類(lèi)型共用的方法庫(kù)
里邊看到還有個(gè)__proto__,因?yàn)镹umber類(lèi)型也是對(duì)象呀,所以這個(gè)__proto__指向Object類(lèi)型公用的方法庫(kù)。點(diǎn)開(kāi)這個(gè)__proto__,就看到了Object類(lèi)型公用的方法庫(kù)
Number類(lèi)型常用方法
toString() toFixed() toExponential() valueOf()
charCodeAt(0)
toString(16)
兩種聲明方式
var a="abc"; var b=new String("abc");
String類(lèi)型專(zhuān)屬方法
聲明了一個(gè)變量,輸出變量后看到,里面除了這個(gè)String對(duì)象的信息,還有一個(gè)東西__proto__,這是個(gè)地址,指向String類(lèi)型公用的方法庫(kù)
點(diǎn)開(kāi)__proto__,看到的就是String類(lèi)型共用的方法庫(kù)
。
。
。
里邊看到還有個(gè)__proto__,因?yàn)镾tring類(lèi)型也是對(duì)象呀,所以這個(gè)__proto__指向Object類(lèi)型公用的方法庫(kù)。點(diǎn)開(kāi)這個(gè)__proto__,就看到了Object類(lèi)型公用的方法庫(kù)
String類(lèi)型常用方法
trim() concat() slice()Boolean類(lèi)型
兩種聲明方式
var a=true; var b=new Boolean(true);
Boolean類(lèi)型專(zhuān)屬方法
聲明了一個(gè)變量,輸出變量后看到,里面就只有一個(gè)東西__proto__,這是個(gè)地址,指向Boolean類(lèi)型公用的方法庫(kù)
點(diǎn)開(kāi)__proto__,看到的就是Boolean類(lèi)型共用的方法庫(kù)
里邊看到還有個(gè)__proto__,因?yàn)锽oolean類(lèi)型也是對(duì)象呀,所以這個(gè)__proto__指向Object類(lèi)型公用的方法庫(kù)。點(diǎn)開(kāi)這個(gè)__proto__,就看到了Object類(lèi)型公用的方法庫(kù)
Boolean類(lèi)型常用方法
Object類(lèi)型
兩種聲明方式
var a={name:1}; var b=new Object({name:1});
Object類(lèi)型專(zhuān)屬方法
聲明了一個(gè)變量,輸出變量后看到,里面對(duì)象a基本信息,還有一個(gè)東西__proto__,這是個(gè)地址,指向Object類(lèi)型公用的方法庫(kù)
點(diǎn)開(kāi)__proto__,a本身就是對(duì)象沒(méi)有別的類(lèi)型,所以看到的就是Object類(lèi)型共用的方法庫(kù)
Object類(lèi)型常用方法
toString() valueOf()
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/108024.html
摘要:說(shuō)白了,原型就是構(gòu)造函數(shù)用來(lái)構(gòu)造新實(shí)例的模板對(duì)象。什么是原型鏈先回答什么是原型。例如這個(gè)原型的原型就是這個(gè)構(gòu)造函數(shù)的,既這個(gè)原型對(duì)象。這些原型對(duì)象通過(guò)像鏈子一樣連起來(lái),就叫做原型鏈。 原型鏈初步學(xué)習(xí) 這篇博客只是我初步理解原型鏈的一個(gè)個(gè)人學(xué)習(xí)筆記,寫(xiě)的比較粗略,且有的地方可能理解錯(cuò)誤. 更多更專(zhuān)業(yè)的關(guān)于原型鏈的解釋請(qǐng)看JavaScript深入之從原型到原型鏈和阮一峰的博客:Javas...
摘要:情況沒(méi)有明確作用對(duì)象的情況下,通常為全局對(duì)象例如函數(shù)的回調(diào)函數(shù),它的就是全局對(duì)象。正因如此,機(jī)器可以作為這類(lèi)對(duì)象的標(biāo)志,即面向?qū)ο笳Z(yǔ)言中類(lèi)的概念。所以機(jī)器又被稱(chēng)為構(gòu)造函數(shù)。原型鏈也就是繼承鏈。 JS面向?qū)ο蠖?this/原型鏈/new原理 阮一峰JavaScript教程:面向?qū)ο缶幊?阮一峰JavaScript教程:實(shí)例對(duì)象與 new 命令 阮一峰JavaScript教程:this 關(guān)...
摘要:中有基本類(lèi)型和復(fù)雜類(lèi)型的區(qū)分。原型與原型鏈這里,就引入了兩個(gè)新的概念。原型對(duì)象就是用來(lái)存放聲明對(duì)象中共有的那部分屬性。而原型對(duì)象自身也是一個(gè)對(duì)象,它也有自己的原型對(duì)象。這樣層層上溯,就形成了一個(gè)類(lèi)似鏈表的結(jié)構(gòu),這就是原型鏈。 JavaScript中有基本類(lèi)型和復(fù)雜類(lèi)型的區(qū)分。 當(dāng)我們?cè)诼暶饕粋€(gè)基本類(lèi)型時(shí): var n1= 1; console.log(n1); //1 這時(shí)我們可以用N...
摘要:數(shù)據(jù)管理,包括數(shù)據(jù)邏輯數(shù)據(jù)請(qǐng)求數(shù)據(jù)存儲(chǔ)等功能。負(fù)責(zé)處理的事件,并更新也負(fù)責(zé)監(jiān)聽(tīng)的變化,并更新,控制其他的所有流程。上面代碼就是一個(gè)最簡(jiǎn)單的類(lèi),構(gòu)造函數(shù)創(chuàng)建出來(lái)的對(duì)象自身有屬性,其原型上面有一個(gè)屬性。 JS題目總結(jié):原型鏈/new/json/MVC/Promise 1原型鏈相關(guān) showImg(https://segmentfault.com/img/remote/14600000161...
摘要:全局對(duì)象規(guī)定全局對(duì)象叫做,但是瀏覽器把作為全局對(duì)象瀏覽器先存在的。就是一個(gè)哈希表,里面含有很多屬性。對(duì)象表示一個(gè)包含文檔的窗口,其屬性指向窗口中載入的文檔。使用屬性可以獲取指定文檔所在窗口。在標(biāo)簽瀏覽器比如中,每個(gè)標(biāo)簽具有自己的對(duì)象。 全局對(duì)象 ECMAScript規(guī)定全局對(duì)象叫做global,但是瀏覽器把window作為全局對(duì)象(瀏覽器先存在的)。window就是一個(gè)哈希表,里面含有...
閱讀 1497·2021-09-23 11:21
閱讀 3172·2019-08-30 14:14
閱讀 3249·2019-08-30 13:56
閱讀 4262·2019-08-30 11:20
閱讀 2020·2019-08-29 17:23
閱讀 2837·2019-08-29 16:14
閱讀 1763·2019-08-28 18:18
閱讀 1544·2019-08-26 12:14