国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題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關鍵字專題關鍵字專題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
當前位置: 首頁 - 科技 - 知識百科 - 正文

JS偽繼承prototype實現方法示例

來源:懂視網 責編:小采 時間:2020-11-27 22:12:39
文檔

JS偽繼承prototype實現方法示例

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

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

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

第一種繼承 (屬性繼承)

 //該函數相當于是一個構造器,也是一個偽類
 function Fn(){
 this.a = 4;
 this.b = 5;
 this.log = function(){
 console.log(this.a,this.b);
 }
 }
 function Fn1(){
 Fn.call(this);//調用父類的構造函數
 }
 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得所有屬性和方法
 //而是是復制了一份Fn的屬性和方法,并不是對象的引用。
 console.log(fn.a); // 5
 console.log(fn1.a); // 4
 this.log(); // 4 5

總結: 這種繼承,是重新拷貝一份放入內存中,他們的值互相獨立,修改一個不會改變另一個。

第二種繼承 原型繼承(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

兩種類的寫法造成示例的區別

 //第一種
 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;
 //由此可以看出兩個對象互不影響
 //說明每個對象里都存在一份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;
 //由此可見就算是不同的示例他們他們所指向的值是同一個。
 fn1.log();//1 5
 fn2.log();//1 5
 fn2.name = 'lisi';
 //這里fn1.name并沒有被修改
 console.log(fn1.name); //zhangan
 console.log(fn2.name); // lisi

總結

類中直接this. 出來的屬性和方法都會直接復制一份給子類或者實例對象。個子類或實例對象之間互不影響。

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

收獲

由于函數都是通用的,所以比較上面兩種方法,第二種明顯比第一種性能要好的多,因為避免了沒有必要的復制,肯定會比較節省內存。所以以后寫類的時候,盡量使用第二種方式。

更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《javascript面向對象入門教程》、《JavaScript錯誤與調試技巧總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript遍歷算法與技巧總結》及《JavaScript數學運算用法總結》

希望本文所述對大家JavaScript程序設計有所幫助。

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

JS偽繼承prototype實現方法示例

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

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 欧美一区二区二区 | 日本一区二区三区在线播放 | 九九九九热精品免费视频 | 九九精品99久久久香蕉 | 亚洲第一欧美 | 伊人久久亚洲综合天堂 | 最新国产精品精品视频 | 日韩成人国产精品视频 | 亚洲欧美韩日 | 国内精品久久久久久久97牛牛 | 91精品国产91热久久p | 亚洲第一网站在线观看 | 国内一级野外a一级毛片 | 国产欧美亚洲精品a | 国产日韩欧美精品在线 | 精品国产欧美一区二区五十路 | 国产日本在线视频 | 永久免费观看的毛片的网站 | 欧美日韩中文字幕在线 | 国产69精品久久久久999 | 欧美精品一二区 | 国产亚洲第一页 | 欧美交配| 国产成人精品一区二区免费视频 | 免费的一级毛片 | 一级黄免费 | 免费在线观看一区二区 | 精品成人一区二区三区免费视频 | 亚洲精品国产综合久久一线 | 中文字幕美日韩在线高清 | 欧美视频三区 | 伊人一区| 黄a毛片| 黄色免费一级视频 | 国产综合亚洲欧美日韩一区二区 | 欧美一欧美一区二三区性 | 亚洲视频在线视频 | 青青操国产视频 | 欧美高清在线不卡免费观看 | 国产日韩在线播放 | 欧美日韩国产高清一区二区三区 |