最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

談一談javascript中繼承的多種方式

 更新時間:2016年02月19日 09:03:09   作者:要飯的  
本文就和大家談一談javascript中的繼承,什么是繼承,繼承的作用,以及js繼承的實現(xiàn)代碼,感興趣的小伙伴們可以參考一下

JS 是沒有繼承的,不過可以曲線救國,利用構(gòu)造函數(shù)、原型等方法實現(xiàn)繼承的功能。

 var o=new Object();

其實用構(gòu)造函數(shù)實例化一個對象,就是繼承,這里可以使用Object中的所有屬性與方法。那么為什么能訪問Object對象的方法,其實訪問的是其原型對象的方法,所有的方法都是放在原型中而不是類中。

console.log(o.__proto__ === Object.prototype) // true 繼承的本質(zhì)
console.log(o.__proto__ === Object);
console.log(Object.__proto__ === Function.prototype);
console.log(Function.prototype.__proto__ === Object.prototype);
console.log(Number.__proto__ === Function.prototype);

object是萬物祖先,Everything is object 嘛。 

1、內(nèi)置對象都繼承自object

var myNumber = new Number(10); //實例化一個數(shù)字對象

字符串對象,其實是String對象的一個實例化 

var s = ‘str';

 除了可以訪問自身屬性方法,還能訪問父類屬性方法

console.log(s.toUpperCase());
console.log(s.toString());
 

2、自定義對象的繼承

// 父類
  var Person = function(){
   this.name='AV老師';
   this.test='測試中的畢福劍';
  } 
  Person.prototype={
   say:function(){
    console.log('呀買碟');
   }
  }
  // 構(gòu)造函數(shù)
  var Canglaoshi = function(name,age,cup){
   this.name=name;
   this.age=age;
   this.cup=cup;
  }
  // 繼承person,則擁有person原型中的方法
  Canglaoshi.prototype=new Person();
  Canglaoshi.prototype.ppp=function(){
   console.log('啪啪啪');
  }
  // 蒼老師擁有了person中的方法
  var xiaocang=new Canglaoshi('空空',18,'E');
  xiaocang.say();
  console.log(xiaocang.name);
  console.log(xiaocang.age);
  console.log(xiaocang.cup);
  console.log(xiaocang.test);

3、自定義對象繼承的原型鏈演示

(function() {
   //父類
   function SuperParent() {
    this.name = 'mike';
   }

   //子類繼承父親 - 二次繼承:
   function Parent() {
    this.age = 12;
   }
   Parent.prototype = new SuperParent(); //通過原型,形成鏈條

   var parent = new Parent();
   console.log("測試父親可以訪問爺爺屬性:" + parent.name);
   console.log("測試父親可以訪問自己的屬性:" + parent.age);

   //繼續(xù)原型鏈繼承 - 三次繼承
   function Child() { //brother構(gòu)造
    this.weight = 60;
   }
   Child.prototype = new Parent(); //繼續(xù)原型鏈繼承


   //原型鏈測試2
   //兒子集成爺爺
   var child = new Child();
   console.log("測試兒子可以訪問爺爺?shù)膶傩裕? + child.name); //繼承了Parent和Child,彈出mike
   console.log("測試兒子可以訪問父親的屬性:" + child.age); //彈出12
   console.log("測試兒子可以訪問自己獨特的屬性:" + child.weight); //彈出12

   //原型鏈測試
   //爺爺可以訪問Object中的方法
   var test = new SuperParent();
   console.log(test.name);
   console.log(test.toString());
   //訪問鏈: SuperParent構(gòu)造對象--》SuperParent原型對象--》Object對象--》Obect原型對象(找到toString方法)--》null

   console.log(child.name);
   //原型鏈:首先訪問Child構(gòu)造函數(shù),發(fā)現(xiàn)沒有name屬性--》尋找__proto__,判斷起指針是否為空--》指向Child原型函數(shù),尋找有沒有name屬性--》
   //---》沒有找到,則判斷其__proto__屬性是否為null,如果不為null,繼續(xù)搜索--》找到parent對象,檢查是否有name屬性,沒有。。。。
  })()

4、構(gòu)造函數(shù)繼承

(function() {
   function People() {
    this.race = '人類';
   }
   People.prototype = {
    eat: function() {
     alert('吃吃吃');
    }
   }

   /*人妖對象*/
   function Shemale(name, skin) {
    People.apply(this, arguments); // 用call也是一樣的,注意第二個參數(shù)
    this.name = name;
    this.skin = skin;
   }
   //實例化 
   var zhangsan = new Shemale('張三', '黃皮膚')
   console.log(zhangsan.name); //張三
   console.log(zhangsan.skin); //黃皮膚
   console.log(zhangsan.race); //人類
  })()

5、組合繼承

(function() {
   function Person(name, age) {
    this.name = name;
    this.age = age;
   }
   Person.prototype.say = function() {}

   function Man(name, age, no) {
    /*會自動調(diào)用Person的方法,同時將name age傳遞過去*/
    Person.call(this, name, age);
    //自己的屬性
    this.no = no;
   }
   Man.prototype = new Person();

   var man = new Man("張三", 11, "0001");
   console.log(man.name);
   console.log(man.age);
   console.log(man.no);
  })()

6、拷貝繼承

<script>
  +(function() {
   var Chinese = {
    nation: '中國'
   };
   var Doctor = {
    career: '醫(yī)生'
   };
   //  請問怎樣才能讓"醫(yī)生"去繼承"中國人",也就是說,我怎樣才能生成一個"中國醫(yī)生"的對象?
   //  這里要注意,這兩個對象都是普通對象,不是構(gòu)造函數(shù),無法使用構(gòu)造函數(shù)方法實現(xiàn)"繼承"。
   function extend(p) {
    var c = {};
    for (var i in p) {     
     c[i] = p[i];    
    }
    c.uber = p;
    return c;
   }
   var Doctor = extend(Chinese);
   Doctor.career = '醫(yī)生';
   alert(Doctor.nation); // 中國
  })()
 </script>

7、寄生組合繼承

<script>
  +(function() {
   /*繼承的固定函數(shù)*/
   function inheritPrototype(subType, superType) {
    var prototype = Object(superType.prototype);
    prototype.constructor = subType;
    subType.prototype = prototype;
   }

   function Person(name) {
    this.name = name;
   }
   Person.prototype.say = function() {}

   function Student(name, age) {
    Person.call(this, name);
    this.age = age;
   }

   inheritPrototype(Student, Person);
   var xiaozhang = new Student('小張', 20);
   console.log(xiaozhang.name)
  })()
 </script>

8、使用第三方框架實現(xiàn)繼承

<script src='simple.js'></script> 
 <!-- 使用的第三方框架simple.js -->
 <script>
  +(function() { < script >
    var Person = Class.extend({
     init: function(age, name) {
      this.age = age;
      this.name = name;
     },
     ppp: function() {
      alert("你懂的");
     }
    });
   var Man = Person.extend({
    init: function(age, name, height) {
     this._super(age, name);
     this.height = height;
    },
    ppp: function() {
     /*調(diào)用父類的同名方法*/
     this._super();
     /*同時又可以調(diào)用自己的方法*/
     alert("好害羞 -,- ");
    }
   });


   var xiaozhang = new Man(21, '小張', '121');
   xiaozhang.ppp();
  })()

希望對大家學(xué)習(xí)javascript程序設(shè)計有所幫助。

相關(guān)文章

  • 現(xiàn)代 javscript 編程 資料

    現(xiàn)代 javscript 編程 資料

    現(xiàn)代 javscript 編程 資料...
    2007-04-04
  • JavaScript將XML轉(zhuǎn)成JSON的方法

    JavaScript將XML轉(zhuǎn)成JSON的方法

    這篇文章主要介紹了JavaScript將XML轉(zhuǎn)成JSON的方法,實例分析了javascript操作XML文件及格式轉(zhuǎn)化的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • JavaScript前端實現(xiàn)壓縮圖片功能

    JavaScript前端實現(xiàn)壓縮圖片功能

    這篇文章主要介紹了JavaScript前端實現(xiàn)壓縮圖片功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • JavaScript Canvas繪制動態(tài)線框效果

    JavaScript Canvas繪制動態(tài)線框效果

    這篇文章主要為大家詳細(xì)介紹了JavaScript Canvas繪制動態(tài)線框效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • javascript中的異步調(diào)用機(jī)制

    javascript中的異步調(diào)用機(jī)制

    這篇文章主要介紹了javascript中的異步調(diào)用機(jī)制,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • 解決JS浮點數(shù)運(yùn)算出現(xiàn)Bug的方法

    解決JS浮點數(shù)運(yùn)算出現(xiàn)Bug的方法

    解決JS浮點數(shù)運(yùn)算出現(xiàn)Bug的方法,需要的朋友可以參考一下
    2013-03-03
  • JavaScript模擬實現(xiàn)繼承的方法

    JavaScript模擬實現(xiàn)繼承的方法

    這篇文章主要介紹了JavaScript模擬實現(xiàn)繼承的方法,實例分析了javascript類的操作與模擬實現(xiàn)繼承的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • OpenLayers3實現(xiàn)測量功能

    OpenLayers3實現(xiàn)測量功能

    這篇文章主要為大家詳細(xì)介紹了OpenLayers3實現(xiàn)測量功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • 微信公眾號開發(fā)之微信支付代碼記錄的實現(xiàn)

    微信公眾號開發(fā)之微信支付代碼記錄的實現(xiàn)

    這篇文章主要介紹了微信公眾號開發(fā)之微信支付代碼記錄的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • 處理文本部分內(nèi)容的TextRange對象應(yīng)用實例

    處理文本部分內(nèi)容的TextRange對象應(yīng)用實例

    TextRange是用來表現(xiàn)HTML元素中文字的對象,是一個用于處理JavaScript對象文本部分內(nèi)容的一個對象
    2014-07-07

最新評論

营山县| 闽侯县| 河北省| 屏南县| 庐江县| 康马县| 岳阳市| 贵南县| 鲁甸县| 新竹县| 灵川县| 镇坪县| 射阳县| 陇西县| 玉环县| 新建县| 叶城县| 商城县| 来凤县| 仲巴县| 浙江省| 东安县| 澄城县| 西和县| 大庆市| 宁津县| 凤庆县| 涟源市| 武夷山市| 柳州市| 都昌县| 兴城市| 宜君县| 康平县| 克拉玛依市| 巴林右旗| 怀柔区| 新沂市| 日喀则市| 陆川县| 沛县|