Object的一些靜態(tài)方法(3)

0. 開場白

我個人博客現(xiàn)在還沒正式上線,不過從簡書的點擊率來看,之前的文章每篇大概有100來個人會點擊進來,其實這種點擊我已經(jīng)是比較心滿意足了(如果你經(jīng)歷過每篇文章只有不到10個人點擊的日子,或許也會理解我現(xiàn)在的心理狀態(tài))汁雷。

今天繼續(xù)寫每天學(xué)點javascript净嘀。其實這個系列文章用這樣的標題主要是為了吸引眼球报咳,并不是說我一定每天都會發(fā)一篇這類文章。畢竟有時候事情多挖藏,如果太過強迫自己每天來連載的話在某種程度上肯定會降低了文章的質(zhì)量暑刃,這是不可取的,我只能保證會堅持連載膜眠,并且盡可能多寫岩臣,但不能保證每天。當文章累積到足夠的數(shù)量的時候宵膨,或許就能夠讓讀者有一種每天學(xué)點的感覺吧架谎。

今天還是講述兩個方法:

Object.getPrototypeOf獲取傳入?yún)?shù)的原型

Object.toString, Object.prototype.toString定義對象的字符串表示

內(nèi)容比較簡單,大牛們可以選擇跳過辟躏,或者留言吐槽谷扣。

1. 正文

Object.getPrototypeOf獲取傳入?yún)?shù)的原型

通過這個方法,以對象作為參數(shù)傳入捎琐,則可以返回這個對象的原型会涎,使用方式比較簡單,犀牛書第三部分也有提供例子,我對例子稍做修改

> var strObject = new String("lanzhiheng") // 創(chuàng)建字符串對象瑞凑,原型是String.prototype
undefined

> Object.getPrototypeOf(strObject) // 獲取新創(chuàng)建對象的原型
[String: '']

我擦末秃,這肯定看不出什么是吧,就算我這樣做

> String.prototype
[String: '']

似乎也只能說明籽御,String.prototype碰巧換算出來是[String: ''],誰能保證它就是創(chuàng)建strObject的原型?

我們還記得用==比較兩個指向?qū)ο蟮淖兞苛纺剑挥挟斔鼈兌贾赶蛲粋€對象的時候才相等嗎惰匙?

> {} == {} // 兩個不同的對象
false

> var a = b = {}
undefined

> a == b // a和b指向同一個對象
true

用同樣的原理我們可以這樣判斷

> Object.getPrototypeOf(strObject) == String.prototype
true

哈哈,這樣就可以判斷出铃将,strObject的原型其實就是String.prototype徽曲。更進一步

> var obj = {};
undefined

> var nextObj = Object.create(obj) // 以obj為原型創(chuàng)建一個新的對象
undefined

> Object.getPrototypeOf(nextObj) == obj // 它的原型就是obj
true

這樣應(yīng)該了解這個方法的作用了吧?

Object.toString, Object.prototype.toString定義對象的字符串表示

幾乎是每一個類型都有它自己的toString類方法麸塞,當然null這種肯定就沒有了秃臣。另外,幾乎所有對象也有它們對應(yīng)類型的toString方法,這個是從原型鏈繼承來的哪工,也就是Object.prototype.toString奥此。這個原型的Object.prototype.toString方法跟Object.toString是不一樣的。前者是可以通過原型鏈條傳承下去雁比,而后者只是Object這個類型的一個類方法而已稚虎。

> Object.toString == Object.prototype.toString // 它們是不一樣的
false

> var b = Object.create(Object.prototype)
undefined

> b.toString == Object.prototype.toString // 通過原型鏈繼承下去了
true

可見,對象的屬性沒有進行任何重載的情況下調(diào)用的依然是原型鏈中的Object.prototype.toString方法偎捎。

當然蠢终,我們很少會主動去調(diào)用,一般它們會在需要的時候自動調(diào)用, 你看:

> Object.prototype.toString()
'[object Object]'
> var a = 1
undefined
> a + Object.prototype
'1[object Object]'

后面的Object.prototype自動調(diào)用了toString茴她,然后才進行了字符串的拼接操作(當然變量a也進行了類似的轉(zhuǎn)換)寻拂。

除此之外,Object.prototype.toString作為最為原始的toString`版本可以用來判斷對象屬于什么類型丈牢。

> function classOf(p) { // 定義這個樣一個方法
...     if (p === null) return 'null';
...     if (p === undefined) return undefined;
...     return Object.prototype.toString.call(p).slice(8, -1);
... }
undefined

> classOf(1)
'Number'
> classOf(null)
'null'

為什么要調(diào)用原始版本祭钉?每個不同的類型的原型上不是都有toString嗎?

正是因為每種不同類型的原型都可能有它們自己定制的toString己沛。我們需要的才必須是Object.prototype.toString這個方法慌核,如:

> (new Date()).toString()
'Wed Oct 26 2016 09:00:31 GMT+0800 (CST)'
> (new Number()).toString()
'0'
> (new Object()).toString()
'[object Object]'

只有Object.prototype.toString會返回類似[object Number]的結(jié)果,我們只需要拿最后的Number便可申尼。

但是這個東西并不能是總能判斷出一個對象的所屬類垮卓,如果它不是內(nèi)置類型的話,我們就不能這樣干了师幕。

> function Range(x) {this.x = x} // 創(chuàng)建一個類
undefined
> var r = new Range() // 創(chuàng)建這個類的對象
> classOf(new Range())
'Object'

可見粟按,得出的類型只是Object。我們沒辦法通過這種方式得出結(jié)果Range们衙。這個在使用的時候還是要多加注意钾怔。

2. 最后

這兩個方法還是比較容易理解的,原諒我不小心就說了那么多蒙挑。很感謝你能看到最后宗侦。

Happy Writing & Coding

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市忆蚀,隨后出現(xiàn)的幾起案子矾利,更是在濱河造成了極大的恐慌姑裂,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件男旗,死亡現(xiàn)場離奇詭異舶斧,居然都是意外死亡,警方通過查閱死者的電腦和手機察皇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門茴厉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人什荣,你說我怎么就攤上這事矾缓。” “怎么了稻爬?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵嗜闻,是天一觀的道長。 經(jīng)常有香客問我桅锄,道長琉雳,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任友瘤,我火速辦了婚禮翠肘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘商佑。我一直安慰自己锯茄,他們只是感情好,可當我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布茶没。 她就那樣靜靜地躺著,像睡著了一般晚碾。 火紅的嫁衣襯著肌膚如雪抓半。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天格嘁,我揣著相機與錄音笛求,去河邊找鬼。 笑死糕簿,一個胖子當著我的面吹牛探入,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播懂诗,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼蜂嗽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了殃恒?” 一聲冷哼從身側(cè)響起植旧,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤辱揭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后病附,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體问窃,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年完沪,在試婚紗的時候發(fā)現(xiàn)自己被綠了域庇。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡覆积,死狀恐怖较剃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情技健,我是刑警寧澤写穴,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站雌贱,受9級特大地震影響啊送,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜欣孤,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一馋没、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧降传,春花似錦篷朵、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至段只,卻和暖如春腮猖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背赞枕。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工澈缺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人炕婶。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓姐赡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親柠掂。 傳聞我的和親對象是個殘疾皇子项滑,可洞房花燭夜當晚...
    茶點故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容