溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么在JavaScript中使用prototype實(shí)現(xiàn)偽繼承

發(fā)布時(shí)間:2021-05-11 16:57:37 來源:億速云 閱讀:132 作者:Leah 欄目:web開發(fā)

這篇文章給大家介紹怎么在JavaScript中使用prototype實(shí)現(xiàn)偽繼承,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

JavaScript是什么

JS是JavaScript的簡(jiǎn)稱,它是一種直譯式的腳本語言,其解釋器被稱為JavaScript引擎,是瀏覽器的一部分,主要用于web的開發(fā),可以給網(wǎng)站添加各種各樣的動(dòng)態(tài)效果,讓網(wǎng)頁更加美觀。

第一種繼承 (屬性繼承)

  //該函數(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的屬性和方法,并不是對(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

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

關(guān)于怎么在JavaScript中使用prototype實(shí)現(xiàn)偽繼承就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI