国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

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

2019-11-20 10:34:07
字體:
來源:轉載
供稿:網友

JS 是沒有繼承的,不過可以曲線救國,利用構造函數、原型等方法實現繼承的功能。

 var o=new Object();

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

console.log(o.__proto__ === Object.prototype) // true 繼承的本質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、內置對象都繼承自object

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

字符串對象,其實是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('呀買碟');   }  }  // 構造函數  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);   //繼續原型鏈繼承 - 三次繼承   function Child() { //brother構造    this.weight = 60;   }   Child.prototype = new Parent(); //繼續原型鏈繼承   //原型鏈測試2   //兒子集成爺爺   var child = new Child();   console.log("測試兒子可以訪問爺爺的屬性:" + 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構造對象--》SuperParent原型對象--》Object對象--》Obect原型對象(找到toString方法)--》null   console.log(child.name);   //原型鏈:首先訪問Child構造函數,發現沒有name屬性--》尋找__proto__,判斷起指針是否為空--》指向Child原型函數,尋找有沒有name屬性--》   //---》沒有找到,則判斷其__proto__屬性是否為null,如果不為null,繼續搜索--》找到parent對象,檢查是否有name屬性,沒有。。。。  })()

4、構造函數繼承

(function() {   function People() {    this.race = '人類';   }   People.prototype = {    eat: function() {     alert('吃吃吃');    }   }   /*人妖對象*/   function Shemale(name, skin) {    People.apply(this, arguments); // 用call也是一樣的,注意第二個參數    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) {    /*會自動調用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: '醫生'   };   //  請問怎樣才能讓"醫生"去繼承"中國人",也就是說,我怎樣才能生成一個"中國醫生"的對象?   //  這里要注意,這兩個對象都是普通對象,不是構造函數,無法使用構造函數方法實現"繼承"。   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 = '醫生';   alert(Doctor.nation); // 中國  })() </script>

7、寄生組合繼承

<script>  +(function() {   /*繼承的固定函數*/   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、使用第三方框架實現繼承

<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() {     /*調用父類的同名方法*/     this._super();     /*同時又可以調用自己的方法*/     alert("好害羞 -,- ");    }   });   var xiaozhang = new Man(21, '小張', '121');   xiaozhang.ppp();  })()

希望對大家學習javascript程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 馆陶县| 湘潭市| 获嘉县| 通州区| 望奎县| 通化市| 永丰县| 安国市| 大洼县| 淄博市| 英超| 昌江| 榆社县| 靖州| 平舆县| 铜陵市| 塔城市| 韶山市| 招远市| 潼关县| 旌德县| 莱西市| 资源县| 丘北县| 清水县| 广灵县| 吕梁市| 肃宁县| 图木舒克市| 视频| 麻江县| 泸定县| 文登市| 黔东| 方城县| 甘泉县| 永川市| 高雄县| 梅河口市| 封丘县| 安国市|