摘要:在默認情況下,所有原型對象都會自動獲得一個構造函數(shù)屬性,這個屬性是一個指向?qū)傩运诤瘮?shù)的指針。但有一點我們是要注意的,當我們將構造函數(shù)的設置為等于一個以對象字面量形式創(chuàng)建的新對象時,屬性不再指向該構造函數(shù)。
1 面試題再現(xiàn)
面試時遇到下面一段代碼:
function A () {} function B () {} A.prototype = { fun: function () {} } var a =new A () console.log(a.constructor === A) console.log(A.prototype.constructor === A) console.log(a.hasOwnProperty("constructor"))
大家猜到上面的結果是啥了嗎?正確答案是 false false false
2 constructor原理我們創(chuàng)建的每個函數(shù)都有一個prototype(原型)對象,這個屬性是一個指針,指向一個對象。在默認情況下,所有原型對象都會自動獲得一個constructor(構造函數(shù))屬性,這個屬性是一個指向prototype屬性所在函數(shù)的指針。當調(diào)用構造函數(shù)創(chuàng)建一個新實例后,該實例的內(nèi)部將包含一個指針(繼承自構造函數(shù)的prototype),指向構造函數(shù)的原型對象。
但有一點我們是要注意的,當我們將構造函數(shù)的prototype設置為等于一個以對象字面量形式創(chuàng)建的新對象時,constructor屬性不再指向該構造函數(shù)。
3 回歸題目該題目就是有了 對A的prototype的重新設置,導致A.prototype 不在指向A的構造函數(shù)。所以上面前兩個都返回false。而constructor 是繼承自prototype ,所以hasOwnProperty("constructor") 是false.
如果A.prototype重新賦值后希望constructor仍指向A的話,我們可以在字面對象里加一個constructor屬性讓它指向A。
A.prototype = { fun: function () {}, constructor: A }
這樣就可以返回true了
4 進階題目A.prototype = new B() var b = new A() console.log(b.constructor === A) console.log(B.prototype.constructor === A) console.log(b.constructor.prototype.constructor === A) console.log(b.hasOwnProperty("constructor"))
上面的都是返回false, 你答對了嗎?
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/94805.html
摘要:關于中面向?qū)ο蟮睦斫饷嫦驅(qū)ο缶幊趟且环N編程思想我們的編程或者學習其實是按照類實例來完成的學習類的繼承封裝多態(tài)封裝把實現(xiàn)一個功能的代碼封裝到一個函數(shù)中一個類中以后再想實現(xiàn)這個功能,只需要執(zhí)行這個函數(shù)方法即可,不需要再重復的編寫代碼。 關于js中面向?qū)ο蟮睦斫?面向?qū)ο缶幊?oop) 它是一種編程思想 (object-oriented programming ), 我們的編程或者學習其...
摘要:關于中面向?qū)ο蟮睦斫饷嫦驅(qū)ο缶幊趟且环N編程思想我們的編程或者學習其實是按照類實例來完成的學習類的繼承封裝多態(tài)封裝把實現(xiàn)一個功能的代碼封裝到一個函數(shù)中一個類中以后再想實現(xiàn)這個功能,只需要執(zhí)行這個函數(shù)方法即可,不需要再重復的編寫代碼。 關于js中面向?qū)ο蟮睦斫?面向?qū)ο缶幊?oop) 它是一種編程思想 (object-oriented programming ), 我們的編程或者學習其...
摘要:原文鏈接關于的原型和原型鏈,看我就夠了一參考鏈接闖關記之原型及原型鏈之原型與原型鏈一篇文章帶你理解原型和原型鏈徹底理解原型鏈一的默認指向圖解和的三角關系原型和原型鏈三張圖搞懂的原型對象與原型鏈 溫故 創(chuàng)建對象的三種方式 通過對象直接量 通過new創(chuàng)建對象 通過Object.create() js中對象分為兩種 函數(shù)對象 普通對象 仔細觀察如下代碼 function Foo(na...
摘要:模擬實現(xiàn)操作符構造函數(shù)返回結果創(chuàng)建一個空對象取傳入的第一個參數(shù),即構造函數(shù),并刪除第一個參數(shù)。二處理返回值構造函數(shù)也是函數(shù),有不同類型返回值。有時候構造函數(shù)會返回指定的對象內(nèi)容,所以要對這部分進行處理。 本文共 1230 字,讀完只需 5 分鐘 寫在前面 最近工作太忙,快接近兩周沒更新博客,總感覺有一些事情等著自己去做,雖然工作內(nèi)容對自己提升挺大,但我總覺得,一直埋著頭走路,偶爾也...
閱讀 2381·2023-04-25 19:27
閱讀 3493·2021-11-24 09:39
閱讀 3909·2021-10-08 10:17
閱讀 3401·2019-08-30 13:48
閱讀 1935·2019-08-29 12:26
閱讀 3125·2019-08-28 17:52
閱讀 3541·2019-08-26 14:01
閱讀 3537·2019-08-26 12:19