原型與原型鏈

前言:今天學(xué)習(xí)了原型和原型鏈抑堡,以下是對(duì)原型和原型鏈的一些總結(jié)。本文從下面幾個(gè)方面講解朗徊,然后在深入講解原型與原型鏈的相關(guān)知識(shí)首妖。

-全局對(duì)象
-簡(jiǎn)單類型與對(duì)象
-Number、Boolean爷恳、String有缆、Object四個(gè)對(duì)象
-(共用屬性)原型
-proto與 prototype
-燒腦的等式

全局對(duì)象Window

ECMAScript 規(guī)定全局對(duì)象叫做 global,但是瀏覽器把 window 作為全局對(duì)象(瀏覽器先存在的)


image.png

注:
1.window對(duì)象中的所有方法都可以省去window温亲,alert()方法可以寫成window.alert()棚壁,或者省去window,直接寫做alert()
2.瀏覽器自己加的屬性栈虚,因?yàn)闆]有標(biāo)準(zhǔn)灌曙,所以瀏覽器上呈現(xiàn)的效果是不一樣的

簡(jiǎn)單類型與對(duì)象

//聲明簡(jiǎn)單的數(shù)據(jù)類型
var n1 = 1;
//聲明一個(gè)對(duì)象,可以用n2.toString()將其轉(zhuǎn)換成字符串
var n2 = new Number(1);

這兩種方法都可以創(chuàng)建一個(gè)變量节芥,區(qū)別就在于所占的內(nèi)存空間的不同

image.png

想要在n1上使用toString方法也是可以的并且返回"1"

這其實(shí)是引用了一個(gè)臨時(shí)的函數(shù)temp,只不過用完之后就把他抹除了

var n1 =1
var temp = new Number(1);
n1 = temp.toString();

下面是一道題目

var n = 1
n.xxx = 2
n.xxx=?//undefined

解題思路如下

image.png

Number對(duì)象
Number的常用屬性
如:

var n2 = new Number(1);
n2.toString();  //"1"
n2.valueOf();  //1
n2.toFixed(2);  //"1.00"
n2.toExponential();  //"1e+0"

注:number類型的的toString方法可以加參數(shù)逆害,表示按照什么進(jìn)制來解析(不加參數(shù)默認(rèn)按十進(jìn)制解析)头镊,如:

(100).toString(16);  //"64"
(100).toString(2); //"1100100"

String對(duì)象

String的常用屬性

如:

var s = new String('hello World');

//獲取字符串中某一位的字符
s.charAt(1) ; //"e"

//獲取字符串中某一位的字符的Unicode編碼
s.charCodeAt(0);  //104

//刪除字符串中多余的空格,是左右兩面的空格
s.trim();  //"hello World"

//連接字符串1和字符串2,字符串1和字符串2是沒有被改變的
var s1 = "hello";
var s2 = " world";
s1.concat(s2);  //"hello world"
console.log(s1);  //"hello"
console.log(s2);  //" world"

//切片,截取字符串(包前不包后)魄幕,從start到end
s.slice(0,2);  //"he"

//將字符串中的e替換成o(只能替換第一次出現(xiàn)的字符)
s.replace('e','o');  //"hollo World"

//搜索字符串中的內(nèi)容(只檢測(cè)到第一次出現(xiàn)的字符)相艇,沒搜到返回-1
s.indexOf('s')  //-1

//根據(jù)字符串中間的空格分隔字符串,變成數(shù)組
s.split();  //["hello World"]

//返回一個(gè)字符串中從指定位置開始到指定字符數(shù)的字符
s.substr(0);  //"hello World"
s.substr(0,5);  //"hello"

Boolean對(duì)象
介紹一個(gè)兩種不同的賦值方法下容易出錯(cuò)的地方纯陨。

var f1 = false;
var f2 = new Boolean(false);
if(f1) { console.log('1') } ;
if(f2) { console.log('2') } ;

注:
f1和f2的值都是false坛芽,但是f2是對(duì)象,一切對(duì)象(不論是否是空對(duì)象)都是truey翼抠,所以使用if判斷語句咙轩,會(huì)將f2轉(zhuǎn)化為了true,打印出2
Object對(duì)象
Object對(duì)象阴颖,兩種賦值方法是一樣的活喊,沒有任何區(qū)別。
注:

var obj1 = {};
var obj2 = {};
obj1 === obj2; // false

為什么obj1不恒等于obj2量愧?同樣都是空獨(dú)享钾菊,但是它們?cè)趕tack棧內(nèi)存中存儲(chǔ)的內(nèi)容是heap堆內(nèi)存中的地址帅矗,每個(gè)對(duì)象的內(nèi)容在heap內(nèi)存中的地址是不會(huì)一樣的,所以對(duì)象與對(duì)象一般都是不相等的煞烫。(除非你將一個(gè)對(duì)象的內(nèi)存地址復(fù)制給另一個(gè)對(duì)象)

原型與原型鏈

原型

   所有對(duì)象都有 toString 和 valueOf 屬性浑此,那么我們是否有必要給每個(gè)對(duì)象一個(gè) toString 和 valueOf 呢?可以但是沒必要滞详。因?yàn)镴S每次聲明一個(gè)對(duì)象都要寫一次這些方法這樣寫的話會(huì)非常占用內(nèi)存凛俱,所以JS 的做法是把所有的對(duì)象共用的屬性全部放在heap堆內(nèi)存的一個(gè)對(duì)象(共用屬性組成的對(duì)象),然后讓每一個(gè)對(duì)象的 __proto__存儲(chǔ)這個(gè)「共用屬性組成的對(duì)象」的地址茵宪。而這個(gè)共用屬性最冰,就是傳說中的原型。

原型的目的:可以減少不必要的內(nèi)存浪費(fèi)
下面用一張圖來解釋對(duì)象使用函數(shù)來進(jìn)行進(jìn)行創(chuàng)建的方法

image.png

其中創(chuàng)建這個(gè)字符串所連成的鏈就是原型鏈稀火。
我們創(chuàng)建的對(duì)象的proto 會(huì)用來指向原有的String對(duì)象暖哨,使得我們可以調(diào)用String對(duì)象的公有屬性。
總結(jié):
proto是某對(duì)象的共用屬性的引用凰狞,是為了用戶使用其共用屬性中的方法而存在的 篇裁。(使用的)
prototype 是瀏覽器寫的,本身就存在赡若,是某對(duì)象的共同屬性的引用达布,為了不讓對(duì)象的共用屬性因沒有被調(diào)用而被垃圾回收而存在。(防止回收)

燒腦的等式

image.png

其實(shí)萬變不離其宗

var 對(duì)象 = new 函數(shù)()
對(duì)象.__proto__ === 函數(shù).prototype

然而JS中萬物皆可當(dāng)作對(duì)象逾冬,所以Function既是函數(shù)也是對(duì)象黍聂。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市身腻,隨后出現(xiàn)的幾起案子产还,更是在濱河造成了極大的恐慌,老刑警劉巖嘀趟,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件脐区,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡她按,警方通過查閱死者的電腦和手機(jī)牛隅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來酌泰,“玉大人媒佣,你說我怎么就攤上這事×晟玻” “怎么了丈攒?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我巡验,道長(zhǎng)际插,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任显设,我火速辦了婚禮框弛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘捕捂。我一直安慰自己瑟枫,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布指攒。 她就那樣靜靜地躺著慷妙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪允悦。 梳的紋絲不亂的頭發(fā)上膝擂,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音隙弛,去河邊找鬼架馋。 笑死,一個(gè)胖子當(dāng)著我的面吹牛全闷,可吹牛的內(nèi)容都是我干的叉寂。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼总珠,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼屏鳍!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起局服,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤钓瞭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后腌逢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡超埋,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年搏讶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片霍殴。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡媒惕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出来庭,到底是詐尸還是另有隱情妒蔚,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站肴盏,受9級(jí)特大地震影響科盛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜菜皂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一贞绵、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧恍飘,春花似錦榨崩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至乳怎,卻和暖如春彩郊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背舞肆。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工焦辅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人椿胯。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓筷登,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親哩盲。 傳聞我的和親對(duì)象是個(gè)殘疾皇子前方,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354