亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2018年06月20日 08:38:43   作者:輘酆  
這篇文章主要介紹了JS偽繼承prototype實(shí)現(xiàn)方法,結(jié)合實(shí)例形式對(duì)比分析了基于prototype實(shí)現(xiàn)模擬繼承的相關(guān)操作技巧,需要的朋友可以參考下

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

眾所周知JS中沒(méi)有類的概念,但是要想實(shí)現(xiàn)類的功能可以同過(guò)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();
  //由此可見(jiàn)Fn1 是fn1的子類。
  fn1 instanceof Fn; // true
  fn instanceof Fn1; // true
  fn.a = 5;
  //由此可見(jiàn)Fn1 繼承了 Fn得所有屬性和方法
  //而是是復(fù)制了一份Fn的屬性和方法,并不是對(duì)象的引用。
  console.log(fn.a); // 5
  console.log(fn1.a); // 4
  this.log(); // 4 5

總結(jié): 這種繼承,是重新拷貝一份放入內(nèi)存中,他們的值互相獨(dú)立,修改一個(gè)不會(huì)改變另一個(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';
  // 由此我們可看出 原型鏈繼承 是 引用繼承
  //不會(huì)重新拷貝一份變量。就像對(duì)象的引用一樣。
  console.log(fn.getName()); // lisi
  console.log(fn1.getName()); // lisi

兩種類的寫(xiě)法造成示例的區(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è)對(duì)象互不影響
  //說(shuō)明每個(gè)對(duì)象里都存在一份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;
  //由此可見(jiàn)就算是不同的示例他們他們所指向的值是同一個(gè)。
  fn1.log();//1 5
  fn2.log();//1 5
  fn2.name = 'lisi';
  //這里fn1.name并沒(méi)有被修改
  console.log(fn1.name); //zhangan
  console.log(fn2.name); // lisi

總結(jié)

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

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

收獲

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

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

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

相關(guān)文章

  • Js過(guò)濾空格的實(shí)現(xiàn)代碼

    Js過(guò)濾空格的實(shí)現(xiàn)代碼

    Js空格過(guò)濾代碼,這個(gè)實(shí)用性很強(qiáng),可以省去用動(dòng)態(tài)語(yǔ)言過(guò)濾字符的麻煩,減輕服務(wù)器壓力,而且JS執(zhí)行速度較快
    2013-03-03
  • js實(shí)現(xiàn)簡(jiǎn)單抽獎(jiǎng)小功能

    js實(shí)現(xiàn)簡(jiǎn)單抽獎(jiǎng)小功能

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)簡(jiǎn)單抽獎(jiǎng)小功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 如何通過(guò)遞歸方法實(shí)現(xiàn)用json-diff渲染json字符串對(duì)比結(jié)果

    如何通過(guò)遞歸方法實(shí)現(xiàn)用json-diff渲染json字符串對(duì)比結(jié)果

    JsonDiff是一個(gè)高性能json差異發(fā)現(xiàn)工具,它幾乎可以發(fā)現(xiàn)任何JSON結(jié)構(gòu)的差異,并且將錯(cuò)誤信息反饋給用戶,下面這篇文章主要給大家介紹了關(guān)于如何通過(guò)遞歸方法實(shí)現(xiàn)用json-diff渲染json字符串對(duì)比結(jié)果的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • js+html5操作sqlite數(shù)據(jù)庫(kù)的方法

    js+html5操作sqlite數(shù)據(jù)庫(kù)的方法

    這篇文章主要介紹了js+html5操作sqlite數(shù)據(jù)庫(kù)的方法,以完整實(shí)例形式分析了JavaScript封裝的html5操作SQLite數(shù)據(jù)庫(kù)類,并分析了具體使用技巧,需要的朋友可以參考下
    2016-02-02
  • 釘釘小程序web-view內(nèi)嵌H5頁(yè)面并實(shí)現(xiàn)通信

    釘釘小程序web-view內(nèi)嵌H5頁(yè)面并實(shí)現(xiàn)通信

    本文主要介紹了釘釘小程序web-view內(nèi)嵌H5頁(yè)面并實(shí)現(xiàn)通信,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 淺談webpack打包過(guò)程中因?yàn)閳D片的路徑導(dǎo)致的問(wèn)題

    淺談webpack打包過(guò)程中因?yàn)閳D片的路徑導(dǎo)致的問(wèn)題

    下面小編就為大家分享一篇淺談webpack打包過(guò)程中因?yàn)閳D片的路徑導(dǎo)致的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-02-02
  • 利用JavaScript實(shí)現(xiàn)簡(jiǎn)單的網(wǎng)頁(yè)時(shí)鐘

    利用JavaScript實(shí)現(xiàn)簡(jiǎn)單的網(wǎng)頁(yè)時(shí)鐘

    這篇文章主要介紹了利用JavaScript實(shí)現(xiàn)簡(jiǎn)單的網(wǎng)頁(yè)時(shí)鐘,主要使用了js的日期對(duì)象,實(shí)現(xiàn)的時(shí)候先創(chuàng)建一個(gè)日期對(duì)象,并進(jìn)行網(wǎng)頁(yè)布局,對(duì)時(shí)間獲取之后將時(shí)間填入對(duì)應(yīng)的標(biāo)簽內(nèi)。然后使用多線程實(shí)現(xiàn)時(shí)鐘的變動(dòng),需要的朋友可以參考一下
    2022-02-02
  • Js base64 加密解密介紹

    Js base64 加密解密介紹

    想必大家對(duì)base64并不陌生吧,在本文將為大家介紹下Js中的base64加密解密過(guò)程,感興趣的朋友不要錯(cuò)過(guò)
    2013-10-10
  • 微信小程序自定義tabbar實(shí)現(xiàn)突出樣式詳解流程

    微信小程序自定義tabbar實(shí)現(xiàn)突出樣式詳解流程

    tabBar相對(duì)而言用的還是比較多的,但是用起來(lái)并沒(méi)有難,下面這篇文章主要給大家介紹了關(guān)于微信小程序全局配置之tabBar的相關(guān)資料,文中通過(guò)圖文以及示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • javascript獲取文檔坐標(biāo)和視口坐標(biāo)

    javascript獲取文檔坐標(biāo)和視口坐標(biāo)

    制作網(wǎng)頁(yè)的過(guò)程中,你有時(shí)候需要知道某個(gè)元素在網(wǎng)頁(yè)上的確切位置。下面的教程總結(jié)了Javascript在網(wǎng)頁(yè)定位方面的相關(guān)知識(shí)。有需要的小伙伴可以參考下。
    2015-05-05

最新評(píng)論