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