<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當(dāng)前位置: 首頁 - 科技 - 知識百科 - 正文

        JS偽繼承prototype實(shí)現(xiàn)方法示例

        來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:12:39
        文檔

        JS偽繼承prototype實(shí)現(xiàn)方法示例

        JS偽繼承prototype實(shí)現(xiàn)方法示例:本文實(shí)例講述了JS偽繼承prototype實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下: 眾所周知JS中沒有類的概念,但是要想實(shí)現(xiàn)類的功能可以同過function模擬。如: 第一種繼承 (屬性繼承) //該函數(shù)相當(dāng)于是一個(gè)構(gòu)造器,也是一個(gè)偽類 function Fn()
        推薦度:
        導(dǎo)讀JS偽繼承prototype實(shí)現(xiàn)方法示例:本文實(shí)例講述了JS偽繼承prototype實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下: 眾所周知JS中沒有類的概念,但是要想實(shí)現(xiàn)類的功能可以同過function模擬。如: 第一種繼承 (屬性繼承) //該函數(shù)相當(dāng)于是一個(gè)構(gòu)造器,也是一個(gè)偽類 function Fn()

        本文實(shí)例講述了JS偽繼承prototype實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下:

        眾所周知JS中沒有類的概念,但是要想實(shí)現(xiàn)類的功能可以同過function模擬。如:

        第一種繼承 (屬性繼承)

         //該函數(shù)相當(dāng)于是一個(gè)構(gòu)造器,也是一個(gè)偽類
         function Fn(){
         this.a = 4;
         this.b = 5;
         this.log = function(){
         console.log(this.a,this.b);
         }
         }
         function Fn1(){
         Fn.call(this);//調(diào)用父類的構(gòu)造函數(shù)
         }
         Fn1.prototype = Fn.prototype;
         var fn = new Fn();
         var fn1 = new Fn1();
         //由此可見Fn1 是fn1的子類。
         fn1 instanceof Fn; // true
         fn instanceof Fn1; // true
         fn.a = 5;
         //由此可見Fn1 繼承了 Fn得所有屬性和方法
         //而是是復(fù)制了一份Fn的屬性和方法,并不是對象的引用。
         console.log(fn.a); // 5
         console.log(fn1.a); // 4
         this.log(); // 4 5
        
        

        總結(jié): 這種繼承,是重新拷貝一份放入內(nèi)存中,他們的值互相獨(dú)立,修改一個(gè)不會改變另一個(gè)。

        第二種繼承 原型繼承(prototype)

         function Fn(){}
         Fn.prototype.data = {
         name: 'zhangsan'
         }
         Fn.prototype.getName = function(){
         return this.data.name;
         }
         function Fn1(){}
         //原型鏈繼承
         Fn1.prototype = Fn.prototype;
         var fn = new Fn();
         var fn1 = new Fn1();
         //所用Fn1 繼承了 Fn
         fn1 instanceof Fn;//true
         console.log(fn1.getName()); // zhangsan
         console.log(fn.getName()); // zhangsan
         //修改了fn的name屬性值
         fn.data.name = 'lisi';
         // 由此我們可看出 原型鏈繼承 是 引用繼承
         //不會重新拷貝一份變量。就像對象的引用一樣。
         console.log(fn.getName()); // lisi
         console.log(fn1.getName()); // lisi
        
        

        兩種類的寫法造成示例的區(qū)別

         //第一種
         function Fn(){
         this.a = 4;
         this.b = 5;
         this.log = function(){
         console.log(this.a,this.b);
         }
         }
         var fn1 = new Fn();
         var fn2 = new Fn();
         fn1.a = 1;
         //由此可以看出兩個(gè)對象互不影響
         //說明每個(gè)對象里都存在一份a和b
         fn1.log(); // 1 5
         fn2.log(); // 4 5
         //第二種
         function Fn(){}
         fn.prototype.name = 'zhangsan';
         fn.prototype.data = {
         a: 4,
         b: 5
         }
         fn.prototype.log = function(){
         console.log(this.data.a,this.data.b);
         }
         var fn1 = new Fn();
         var fn2 = new Fn();
         fn1.a = 1;
         //由此可見就算是不同的示例他們他們所指向的值是同一個(gè)。
         fn1.log();//1 5
         fn2.log();//1 5
         fn2.name = 'lisi';
         //這里fn1.name并沒有被修改
         console.log(fn1.name); //zhangan
         console.log(fn2.name); // lisi
        
        

        總結(jié)

        類中直接this. 出來的屬性和方法都會直接復(fù)制一份給子類或者實(shí)例對象。個(gè)子類或?qū)嵗龑ο笾g互不影響。

        使用prototype增加的屬性和方法,對象類型的只有一份,值類型的這會被復(fù)制。

        收獲

        由于函數(shù)都是通用的,所以比較上面兩種方法,第二種明顯比第一種性能要好的多,因?yàn)楸苊饬藳]有必要的復(fù)制,肯定會比較節(jié)省內(nèi)存。所以以后寫類的時(shí)候,盡量使用第二種方式。

        更多關(guān)于JavaScript相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《javascript面向?qū)ο笕腴T教程》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》

        希望本文所述對大家JavaScript程序設(shè)計(jì)有所幫助。

        聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        JS偽繼承prototype實(shí)現(xiàn)方法示例

        JS偽繼承prototype實(shí)現(xiàn)方法示例:本文實(shí)例講述了JS偽繼承prototype實(shí)現(xiàn)方法。分享給大家供大家參考,具體如下: 眾所周知JS中沒有類的概念,但是要想實(shí)現(xiàn)類的功能可以同過function模擬。如: 第一種繼承 (屬性繼承) //該函數(shù)相當(dāng)于是一個(gè)構(gòu)造器,也是一個(gè)偽類 function Fn()
        推薦度:
        標(biāo)簽: js 示例 實(shí)例
        • 熱門焦點(diǎn)

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲一区二区无码偷拍| 精品亚洲成a人片在线观看| 亚洲第一街区偷拍街拍| 国产在线观看片a免费观看| 亚洲av永久无码精品三区在线4| 182tv免费观看在线视频| 91亚洲国产成人久久精品网站| 成全动漫视频在线观看免费高清版下载| 亚洲乱码中文字幕综合234| 日本免费精品一区二区三区| 亚洲乱码国产一区网址| 波多野结衣免费一区视频| 亚洲AV无码成人精品区在线观看 | 小说区亚洲自拍另类| 国产一区二区三区免费看| 深夜A级毛片视频免费| 精品国产人成亚洲区| 久久er国产精品免费观看2| 7777久久亚洲中文字幕蜜桃| 又粗又大又黑又长的免费视频| 亚洲 欧洲 日韩 综合在线| 国产婷婷高清在线观看免费 | 99热亚洲色精品国产88| 免费黄网在线观看| 日韩成人毛片高清视频免费看| 亚洲综合伊人久久综合| **真实毛片免费观看| 亚洲成av人在线观看网站| 亚洲综合久久夜AV | 99re免费99re在线视频手机版| 日本亚洲精品色婷婷在线影院| 又粗又硬又大又爽免费视频播放| 中国一级全黄的免费观看| 亚洲欧洲高清有无| 免费在线观看毛片| 8x网站免费入口在线观看| 猫咪免费人成网站在线观看入口| 亚洲2022国产成人精品无码区| 永久免费视频v片www| 国产精品免费看久久久| 亚洲国产AV无码一区二区三区 |