大廠常見面試:原型與原型鏈

前言

讓你感受不一樣的原型鏈

\color{#4A33EE}{第一題:}
Function.prototype.a = 1;
Object.prototype.b = 2;

function A() {}
var a = new A();

console.log(A.a, A.b);
console.log(a.a, a.b);
console.log(Function.b, Object.a);

上述輸出什么伐厌?


答案:

console.log(A.a, A.b); // 1 2
console.log(a.a, a.b); // undefined 2
console.log(Function.b, Object.a); // 2 1

原因:

普及一下九大內(nèi)置對象:String、Number裸影、Boolean 挣轨、Object、Function轩猩、Array卷扮、Date、RegExp界轩、Error画饥,同時也是內(nèi)置函數(shù),內(nèi)置函數(shù)本身是Function作為構(gòu)造器調(diào)用生成的實例對象浊猾。

1) ECMAScript規(guī)定了兩個特殊的內(nèi)置對象:ObjectFunction抖甘,他們的特殊性在于,他們本身是函數(shù)對象葫慎,而他們同時也是構(gòu)造函數(shù)衔彻。(函數(shù)對象對應(yīng)的類型是Function,正如數(shù)組對象對應(yīng)的類型是Array偷办;正常的構(gòu)造函數(shù)艰额,就是new Fn()。 )

  • 因為構(gòu)造函數(shù)是Function是實例對象椒涯,所以ObjectFunction的實例對象柄沮。
  • 因為Object是所有對象的基類,所以Function.prototypeObject的實例對象。

2)原型鏈?zhǔn)菍ο蟮募献娲辏總€對象都有內(nèi)部屬性[[Prototype]]__proto__指針)指向另一個對象狱意;當(dāng)訪問對象某一屬性的時候,如果此屬性不在此對象的自身屬性上拯欧,則繼續(xù)去[[Prototype]]指向的對象上查找此屬性详囤。[[Prototype]]形成的對象的鏈?zhǔn)郊霞丛玩湣_@里可以得出:原型鏈上的所有元素都是對象镐作。
而實例對象就會在自身找不到時會往[[Prototype]]指向的對象上查找藏姐。

3)ECMASciprt規(guī)定:原型鏈上有兩個元素是固定的,終點是null该贾,倒數(shù)第二的元素是Object.prototype指向的對象羔杨。

  1. 原型鏈上排行倒數(shù)第三的有這幾種情況:
    ?1. 字面量{}new Object()
    ?2. Math
    ?3. JSON
    ?4. 除Object之外的內(nèi)置函數(shù)的prototype屬性指向的對象(8個)

  2. 原型鏈上排行倒數(shù)第三的有這幾種情況:
    ?1. 除Object之外的內(nèi)置函數(shù)的實例對象(8個)
    ?2. 內(nèi)置函數(shù)(9個)

說那么多,不如一張圖來的方便: (轉(zhuǎn)載圖片請@我靶庙,謝謝)

image.png

我們最常用的就是 字面量{}和function问畅;上述題目中

Function.prototype.a = 1;
Object.prototype.b = 2;

function A() {}
var a = new A();

console.log(A.a, A.b); // 1 2
console.log(a.a, a.b); // undefined 2
console.log(Function.b, Object.a); // 2 1

1娃属、function A() {}在原型鏈的倒數(shù)第四(方塊function)六荒,按照原型鏈查找規(guī)則,所以它可以拿到Function.prototypeObject.prototype矾端。

2掏击、var a = new A();,其實a就是一個對象秩铆,我們看下這句話的原理是什么:

  var obj = { __proto__: F.prototype }; /*第一步*/
  return function() {
    F.apply(obj, arguments); /*第二步*/
    return obj; /*第三步*/
  };
}

用法:

var a = New(A)('小米');

你可以看到調(diào)用New(A)('小米')實際return的是obj砚亭,obj就是一個對象。
所以此時原型鏈在倒數(shù)第三處殴玛,往上找只有Object.prototype捅膘。

3、Function.bObject.a中的 Function和Object是九個內(nèi)置對象中的滚粟,所以它可以找到Function.prototypeObject.prototype寻仗。


一張圖是不是解決了多年的困擾,曾經(jīng)記了太多文字凡壤,沒多久就忘署尤,經(jīng)常看看圖亚侠,很容易就深入腦海了曹体。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市硝烂,隨后出現(xiàn)的幾起案子箕别,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件串稀,死亡現(xiàn)場離奇詭異啥酱,居然都是意外死亡,警方通過查閱死者的電腦和手機厨诸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進(jìn)店門镶殷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人微酬,你說我怎么就攤上這事绘趋。” “怎么了颗管?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵陷遮,是天一觀的道長。 經(jīng)常有香客問我垦江,道長帽馋,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任比吭,我火速辦了婚禮绽族,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘衩藤。我一直安慰自己吧慢,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布赏表。 她就那樣靜靜地躺著检诗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瓢剿。 梳的紋絲不亂的頭發(fā)上逢慌,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天,我揣著相機與錄音间狂,去河邊找鬼攻泼。 笑死,一個胖子當(dāng)著我的面吹牛前标,可吹牛的內(nèi)容都是我干的坠韩。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼炼列,長吁一口氣:“原來是場噩夢啊……” “哼只搁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起俭尖,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤氢惋,失蹤者是張志新(化名)和其女友劉穎洞翩,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體焰望,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡骚亿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了熊赖。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片来屠。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖震鹉,靈堂內(nèi)的尸體忽然破棺而出俱笛,到底是詐尸還是另有隱情,我是刑警寧澤传趾,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布迎膜,位于F島的核電站,受9級特大地震影響浆兰,放射性物質(zhì)發(fā)生泄漏磕仅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一簸呈、第九天 我趴在偏房一處隱蔽的房頂上張望榕订。 院中可真熱鬧,春花似錦蝶棋、人聲如沸卸亮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至段直,卻和暖如春吃溅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鸯檬。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工决侈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人喧务。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓赖歌,卻偏偏與公主長得像,于是被迫代替她去往敵國和親功茴。 傳聞我的和親對象是個殘疾皇子庐冯,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,685評論 2 360

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