日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

深入理解构造函数和原型链

發(fā)布時間:2023/12/10 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 深入理解构造函数和原型链 小編覺得挺不錯的,現(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._proto_._proto_==Object.prtotype; //原型鏈
    • 即base繼承自Base.prototype,Base.prototype繼承自O(shè)bject.prototype;
  • 原型繼承
    • 以上原型繼承是通過將Base.prototype設(shè)置為由Obejct()創(chuàng)建的對象實現(xiàn)的;
    • 可以通過將任意的構(gòu)造函數(shù)的prototype屬性指定為一個對象,實現(xiàn)繼承;
function Case(){}; Case.prototype=base; var case=new Case();
    • case.的原型鏈?zhǔn)荂ase.prototype(base),Base.prototype,Object.prototype;
對象的constructor屬性
  • 由自定義構(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;
藍(lán)色
  • 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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。