深入理解构造函数和原型链
生活随笔
收集整理的這篇文章主要介紹了
深入理解构造函数和原型链
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
使用構(gòu)造函數(shù)初始化對象的過程 function Base(){} //函數(shù)聲明 var base=new Base() //對象初始化
- 執(zhí)行Base()的過程:
-
- 創(chuàng)建一個名為Base的function對象:
-
- 執(zhí)行function Base(){函數(shù)體}本質(zhì)上相當(dāng)于var Base=new Function("函數(shù)體");
- 所以Base對象的構(gòu)造函數(shù)的是Function();
- 為Base對象添加屬性:
-
- 添加_proto_屬性,其屬性值Function.prototype,也就說Base對象的原型是其構(gòu)造函數(shù)的prototype屬性;
-
- 在任意類似var x=new X()的過程中,都會設(shè)置x._proto_=X.prptotype;
- 添加prototype屬性:先用new Object()創(chuàng)建新對象,并為新對象創(chuàng)建constructor屬性,屬性值設(shè)置為Base;最后將該對象賦值給prototype屬性;
-
- 因為Base.prototype=new Object()所以Base.prototype._proto_==Object.prototype;
- 為Base對象添加其他屬性,如call,construct,scope,length等屬性;
- 執(zhí)行var base=new Base()
-
- 調(diào)用Base的construct屬性引用的函數(shù), 創(chuàng)建一個新object, 假設(shè)為x;
- 將Base.prototype賦值給x._proto_屬性;
-
- 如果Base.prototype不是object,將Object.prototype賦值x._proto_;
- 調(diào)用Base.call(x),對x進行初始化;
- 返回x,x就是base;
- 如果Base()使用return返回其他對象,base就是其他對象;
- 因為base._proto_==Base.prototype,且Base.prototype._proto_==Object.prototype;
-
- 即base繼承自Base.prototype,Base.prototype繼承自O(shè)bject.prototype;
- 原型繼承
-
- 以上原型繼承是通過將Base.prototype設(shè)置為由Obejct()創(chuàng)建的對象實現(xiàn)的;
- 可以通過將任意的構(gòu)造函數(shù)的prototype屬性指定為一個對象,實現(xiàn)繼承;
-
- case.的原型鏈?zhǔn)荂ase.prototype(base),Base.prototype,Object.prototype;
- 由自定義構(gòu)造函數(shù)創(chuàng)建的對象默認(rèn)沒有自己的constructor屬性的,只有由Object()創(chuàng)建的對象真正擁有constructor屬性;
- 所以base對象的constructor屬性繼承自Base.prototype,指向Base();
- 同樣case對象的constructor屬性也繼承自Base.prototype,指向Base();
- 對象f的原型是構(gòu)造函數(shù)的prototype屬性:F.prototype;
-
- F.prototype的constructor屬性指向f的構(gòu)造函數(shù)F;
- F.prototype作為對象其原型是Object.prototype;
- 構(gòu)造函數(shù)F作為一個對象,其原型是Function.prototype;
-
- Function.prototype的constructor屬性指向F的構(gòu)造函數(shù)Function;
- Function作為對象其原型是Function.prototype;
- Function.prototype的原型是Object.prototype;
-
- Object.prototype的constructor屬性指向Function.prototype對象的構(gòu)造函數(shù)Object;
- Object作為一個函數(shù),其原型是Function.prototype;
- Object.prototype的原型是null
轉(zhuǎn)載于:https://www.cnblogs.com/qinghe/p/5391558.html
總結(jié)
以上是生活随笔為你收集整理的深入理解构造函数和原型链的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 21天学通C语言-学习笔记(11)
- 下一篇: 1.名字忘了