陽光燦爛的一天,我背了一個小包,正打算去商場逛街,悠哉悠哉的走在路上。一隻黑色的野貓跑了過去,我捏造了一個泡泡 var bubble={ }去敲打它的尾巴,它回頭看了一眼我,金色的瞳孔里倒映著一串url,我又吹起一個var bubble={"mainurl":"www.treehole.com",' ...
陽光燦爛的一天,我背了一個小包,正打算去商場逛街,悠哉悠哉的走在路上。一隻黑色的野貓跑了過去,我捏造了一個泡泡 var bubble={ }去敲打它的尾巴,它回頭看了一眼我,金色的瞳孔里倒映著一串url,我又吹起一個var bubble={"mainurl":"www.treehole.com",'suburl':"come and prove yourself"}, mainurl欄位正是貓眼中的光影所示,又該去會會老朋友了,我點擊了這個入口的參數,瞬間頭暈目眩,身體像是被撕裂了一般。
四周一片漆黑,“好久不見,還是那麼菜啊”,遠處傳來一聲,我抬頭一看,原來是JS先生。
J:怎麼,new關鍵字用著不喜歡?好一個大周末,敲門偏要用對象直接量,你的泡泡不會嚇著我的貓啊?
M:怪我咯,var a=new Object(); 這種語法太常見了,年輕人不能夠這麼無聊,要不然社會怎麼進步呢。
J:好大的口氣,臭小子你給我謙虛著點,告訴你,現在江湖上出了一個Object.create()方法,傳參為null的話產生的對象連像toString那樣的基礎方法都沒有。
M:駭,怕什麼,傳參為Object.prototype不就行了。這個函數的本質就是:通過任意原型創造新對象,使任何對象可繼承。我早已看破,不怕不怕咯。
J:呦,一般這麼自信,就是又欠練了,拿IDE過來,給我寫個函數:要求是通過原型繼承創建一個新對象。
M:就用剛纔的Object.create()方法啊
J:那是新特性啊大哥,ECMAScript5出來3就不活了?周全考慮一下好嗎
M:哦 那你等下
function inherent(p){
if(p == null) throw TypeError();
if(Object.create) return Object.create(p);//先判斷一下Object.create方法是否存在
var t=typeof p;
if(t!=="object" && t!=="function") throw TypeError();//檢查一下類型
function f(){};
f.prototype=p;
return new f();
}
M:不知師父還滿意?
J: 嗯,最後三行還算可圈可點
M:(偷笑),不是我寫的好,是師父家的犀牛養的好,它怎麼叫,我就怎麼寫唄。(隨後解析這個函數)
J:那好,我問你小子,屬性的兩種訪問方法?
M:o.pro o["pro"] 如果屬性名剛好是關鍵字的名字,那麼很不幸,只有第二種方法可以成功
JS心裡暗想,上道了上道了,馬上就要掉坑裡去了,又發問:第二種的學名是?
M:什麼學名,我只知道你們家的那些對象寶寶都關聯著數組,可以通過字元串索引
J:哈 才疏學淺了吧 來來來 小板凳呢 老夫給你們碼一碼。咱們家就是弱類型語言,不像那個c啊,c++啊,java啊,特別靈活,你想給對象添加一個屬性的時候,不用在定義處說死,程式寫到哪裡加就ok了。
M學生看師父說的高興,又問:老頭兒,那你剛纔問我第二種的學名是什麼意思?
J:哦,學名你猜啊。我覺得第二種方法好是因為它的訪問方式是字元串,還是兩個字,靈活啊,這樣我寫程式的時候是可以做手腳的啊,比如
var addr=""
var customer={"address0":"haha","address1":"hoho","address2":"bobo"};
for(var i=0;i<4;i++)
{
addr+=customer["address"+i]+"\n";
}
M: 拿起手機瘋狂百度,然後說作為關聯。。關聯數組的對象!名字是作為關聯數組的對象!
J: 小孩抽抽啥呢,大哥告訴你,不僅可以這麼寫,還可以讓[]內的字元串以參數的形式動態的出現呢,怎麼樣,是不是強過某點訪問方法一百倍?
M:以參數的形式?這不禁讓我想起了for in語句。 in之前的變數列印出來是屬性名。
J: 天色不早了,回去好好改改你的泡泡,下次厲害點來見我
M:不不不,我還是在這吃完晚飯再走吧 : )
J:...... : (