<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
        主站蜘蛛池模板: 亚洲精品成人网站在线播放| 国产网站在线免费观看| 国产偷窥女洗浴在线观看亚洲| 亚洲AV无码资源在线观看| 24小时免费直播在线观看| 亚洲字幕AV一区二区三区四区| 在线永久看片免费的视频| 久久成人永久免费播放| 亚洲麻豆精品国偷自产在线91| 爱情岛论坛免费视频| 亚洲VA综合VA国产产VA中| jizz日本免费| 亚洲VA中文字幕无码毛片| 久久精品无码专区免费东京热| 亚洲性猛交xx乱| 免费看片A级毛片免费看| 日韩国产欧美亚洲v片| 免费一看一级毛片| 成av免费大片黄在线观看| 无码欧精品亚洲日韩一区| 在线观看成人免费视频不卡| 亚洲久热无码av中文字幕| 免费夜色污私人影院在线观看| 成年网站免费入口在线观看| 亚洲AV无码乱码在线观看富二代| 精品国产免费一区二区三区香蕉| 亚洲性色成人av天堂| 国产大片91精品免费看3| 三级毛片在线免费观看| 亚洲精品视频在线观看视频| 国产三级在线观看免费| 久久一区二区三区免费| 亚洲第一永久在线观看| 国产gav成人免费播放视频| 久久99免费视频| 国产亚洲中文日本不卡二区| 亚洲无av在线中文字幕| 亚洲免费综合色在线视频| 人人爽人人爽人人片av免费| 亚洲精品在线网站| 亚洲视频在线一区二区|