1. <ul id="0c1fb"></ul>

      <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
      <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区

      RELATEED CONSULTING
      相關(guān)咨詢
      選擇下列產(chǎn)品馬上在線溝通
      服務(wù)時間:8:30-17:00
      你可能遇到了下面的問題
      關(guān)閉右側(cè)工具欄

      新聞中心

      這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
      JavaScript如何使用prototype屬性實現(xiàn)繼承

      這篇文章主要為大家展示了JavaScript如何使用prototype屬性實現(xiàn)繼承,內(nèi)容簡而易懂,希望大家可以學習一下,學習完之后肯定會有收獲的,下面讓小編帶大家一起來看看吧。

      施甸網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)建站2013年至今到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站

      JS并沒有顯式的繼承語法,在JS中所有的對象都是Object的子類實現(xiàn), 因而對象之間是平等關(guān)系.

      盡管如此我們可以通過特殊的方法達到繼承的效果.

      當然JS也不能直接定義類, 我們通過定義函數(shù)可以得到一個同名的類, 同時這個函數(shù)就是這個類的構(gòu)造器,

      在定義函數(shù)時以this修飾的變量就是定義的 類的實例中的屬性,當這個屬性時函數(shù)時,  就可以認為這個屬性變成了一個實例方法

      //定義一個Person類
      function Person(name , age)
      {
        this.name=name;
        this.age=age;
        //定義一個info函數(shù)
        this.info=function()
        {
          document.writeln("年齡"+this.age+"姓名"+this.name);
        }
      }
      //創(chuàng)建Person類的實例對象
      var p1= new Person('xiaoming',20);
      //調(diào)用p1的info方法
      p1.info();
      var p2= new Person('wang',22);
      p2.info();

      這種在類內(nèi)(函數(shù)內(nèi))定義函數(shù)的方式是有弊端的:

      • 性能低下, 這種方式定義函數(shù)在每次創(chuàng)建對象時都會創(chuàng)建一個新的info函數(shù), 有多個對象就會有多個info函數(shù),實際上我們只需要一個info函數(shù),  這樣就會造成系統(tǒng)內(nèi)存泄漏, 引起性能的下降
      • 使info函數(shù)中的局部變量產(chǎn)生閉包, 閉包會擴大局部變量的作用域,使局部變量存活到函數(shù)外

      為了避免這兩種情況, 通常不建議在類定義時為類定義方法,而是采用prototype屬性:

      JS中所有類(函數(shù))都有一個prototype屬性, 為該屬性增加屬性方法可以視為對類的拓展,

      也就是增加了prototype屬性的類繼承了原有的類, 這也就是JS所提供的偽繼承機制

      //定義一個Person類
      function Person(name , age)
      {
        this.name=name;
        this.age=age;
        //定義一個info函數(shù)
        this.info=function()
        {
          document.writeln("年齡"+this.age+"姓名"+this.name);
        }
      }
      //創(chuàng)建Person類的實例對象
      var p1= new Person('xiaoming',20);
      //調(diào)用p1的info方法
      p1.info();
       
      //為Person類增加walk方法
      Person.prototype.walk=function()
      {
        document.writeln(this.name+'正在走
      '); } var p2=new Person('xiaohong',20); //p2可以調(diào)用Person中的方法 p2.info(); //也可以調(diào)用prototype屬性增加的方法 p2.walk(); //JS允許為類動態(tài)增加方法和屬性,這里p1也可以調(diào)用walk p1.walk();

      上例為prototype屬性增加了方法可以認為是為Person類動態(tài)地增加了方法,

      這種方式增加的方法會讓所有實例共享一個walk方法, 可以注意到是Person.prototype類的屬性,并非實例

      walk方法不在Person函數(shù)內(nèi),因此不會產(chǎn)生閉包,

      這種為類動態(tài)地增加屬性和方法可以被當作一種偽繼承,

      但這種偽繼承并非產(chǎn)生 了新的子類而是修改了原有的類

      別著急,prototype屬性還有另一種方式實現(xiàn)繼承:

      prototype屬性代表該類原型對象, 即默認是一個Object對象, 將類prototype設(shè)為父類實例可以實現(xiàn)繼承

      function Person(name,age)
      {
        this.name=name;
        this.age=age;
      }
      Person.prototype.say=function()
      {
        console.log(this.name+'說話了');
      }
      var per = new Person('小明',20);
      per.say();
      //再定義一個student類,欲意繼承Person
      function Student (grade)
      {
        this.grade=grade;
      }
      //將student的prototype設(shè)為Person對象
      Student.prototype =new Person('小紅',22);
      //為Student添加方法
      Student.prototype.intro= function()
      {
        console.log(this.name+'是'+this.grade+'年級學生');
      }
      var stu=new Student(3);
      stu.name="小剛";
      console.log(stu instanceof Person&& stu instanceof Student);//true
      stu.say();//小剛說話了
      stu.intro();//小剛是3年級學生

      上例定義了Person類,增加了say()方法

      又定義了Student類, 并將Student類的prototype屬性設(shè)為Person對象, 表明Student原型是Person對象,

      也就是Student繼承了Person, 會得到其方法和屬性

      以上就是關(guān)于JavaScript如何使用prototype屬性實現(xiàn)繼承的內(nèi)容,如果你們有學習到知識或者技能,可以把它分享出去讓更多的人看到。


      網(wǎng)站名稱:JavaScript如何使用prototype屬性實現(xiàn)繼承
      鏈接地址:http://www.ef60e0e.cn/article/posghe.html
      99热在线精品一区二区三区_国产伦精品一区二区三区女破破_亚洲一区二区三区无码_精品国产欧美日韩另类一区
      1. <ul id="0c1fb"></ul>

        <noscript id="0c1fb"><video id="0c1fb"></video></noscript>
        <noscript id="0c1fb"><listing id="0c1fb"><thead id="0c1fb"></thead></listing></noscript>

        望谟县| 隆子县| 马尔康县| 犍为县| 会昌县| 邮箱| 凌海市| 南皮县| 七台河市| 太仆寺旗| 贺兰县| 岱山县| 沙湾县| 外汇| 安庆市| 大冶市| 青田县| 石门县| 安远县| 凯里市| 万年县| 宜春市| 平安县| 阿拉善左旗| 和林格尔县| 奎屯市| 阜新| 台南县| 色达县| 武强县| 彭阳县| 蕲春县| 普兰县| 南平市| 迁安市| 新密市| 靖西县| 通渭县| 盐源县| 山阳县| 格尔木市|