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

Javascript組合繼承方法代碼實(shí)例解析

 更新時(shí)間:2020年04月02日 14:35:13   作者:Jake  
這篇文章主要介紹了Javascript組合繼承方法代碼實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

組合繼承

組合繼承,指將原型鏈和借用構(gòu)造函數(shù)的技術(shù)組合到一塊,從而發(fā)揮二者之長的一種繼承模式。其背后思路使用用原型鏈實(shí)現(xiàn)對(duì)原型屬性和方法的繼承,而通過構(gòu)造函數(shù)來實(shí)現(xiàn)對(duì)實(shí)例屬性的繼承。這樣,即通過在原型上定義方法實(shí)現(xiàn)了函數(shù)復(fù)用,又能夠保證每個(gè)實(shí)例都有它自己的屬性。

下面來看一個(gè)例子

function SuperType(name) {
  this.name = name;
  this.color = ['red', 'blue', 'green'];
};
//
SuperType.prototype.sayName = function() {
  console.log(this.name);
};
//
function SubType(name, age) {
  //繼承屬性
  SuperType.call(this, name);		// 第二次調(diào)用SuperType
//
  this.age = age;
};
//繼承方法
SubType.prototype = new SuperType();	// 第一次調(diào)用SuperType
console.log(SubType.prototype.constructor); //輸出SuperType函數(shù)的源碼,即此時(shí)SubType.prototype.constructor指向SuperType函數(shù)
SubType.prototype.constructor = SubType; //將SubType.prototype.constructor指針指回SubType函數(shù)
SubType.prototype.sayAge = function() {
  console.log(this.age);
};
//
var instance1 = new SubType('Jake', 20)
instance1.color.push('black');
console.log(instance1.color); //'red,blue,green,black'
instance1.sayName(); //'Jake'
instance1.sayAge(); //20
//
var instance2 = new SubType('Greg', 21);
console.log(instance2.color); //'red,blue,green'
instance2.sayName(); //'Greg';
instance2.sayAge(); //21

觀察輸出結(jié)果,便可以發(fā)現(xiàn):兩個(gè)SubType實(shí)例(instance1和instance2)既分別有自己的屬性,又可以使用相同的方法。

優(yōu)點(diǎn)

組合繼承避免了原型鏈和借用構(gòu)造函數(shù)的缺陷,融合了它們的優(yōu)點(diǎn),所以是JS中最常用的繼承模式。而且,instanceof和isPrototypeOf()也能夠用于識(shí)別基于組合繼承創(chuàng)建的對(duì)象。

缺點(diǎn)

調(diào)用兩次SuperType構(gòu)造函數(shù)

在SubType.prototype上創(chuàng)建了不必要的屬性

寄生組合繼承

function SuperType (name) {
 this.name = name
 this.colors = ['red', 'blue', 'yellow']
}

SuperType.prototype.sayName = function () {
 console.log(this.name)
}

function SubType (name, age) {
 SuperType.call(this, name) // 通過構(gòu)造函數(shù)繼承實(shí)例屬性
 this.age = age
}

SubType.prototype = Object.create(SuperType.prototype)	//繼承父類共享方法
SubType.prototype.constructor = SubType	//將SubType.prototype.constructor指針指回SubType函數(shù)
SubType.prototype.sayAge = function () {
 console.log(this.age)
}

let obj = new SubType('jake', 22)
obj.sayName()	// jake
obj.sayAge()	// 22
console.log(obj instanceof SubType)	// true
console.log(obj instanceof SuperType)	// true

優(yōu)點(diǎn)

寄生組合繼承只調(diào)用了一次SuperType,所以更高效

避免了在SubType.prototype上創(chuàng)建了不必要的屬性

下面說說原型鏈和構(gòu)造函數(shù)的缺點(diǎn)

原型鏈

缺點(diǎn):當(dāng)原型鏈中包含引用類型值時(shí),原型屬性會(huì)被所有實(shí)例共享;

下面看一個(gè)例子

function SuperType() {
  this.color = ['red', 'blue', 'green'];
}
//
function SubType() {};
//
SubType.prototype = new SuperType(); //繼承了SuperType
//
var instance1 = new SubType();
instance1.color.push('black');
console.log(instance1.color);  //'red,blue,green,black'
//
var instance2 = new SubType();
console.log(instance2.color);  //'red,blue,green,black'

借用構(gòu)造函數(shù)

缺點(diǎn):如果僅僅使用構(gòu)造函數(shù),方法都在構(gòu)造函數(shù)中定義,因此函數(shù)就無法實(shí)現(xiàn)復(fù)用了。而且,在超類型的原型中定義的方法,對(duì)于子類型而言也是不可見的。

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 前端中間件Midway的使用教程

    前端中間件Midway的使用教程

    Midway 基于 TypeScript 開發(fā),結(jié)合了面向?qū)ο螅∣OP + Class + IoC)與函數(shù)式(FP + Function + Hooks)兩種編程范式,并在此之上支持了 Web / 全棧 / 微服務(wù) / RPC / Socket / Serverless 等多種場景,這篇文章主要介紹了前端中間件Midway的使用,需要的朋友可以參考下
    2023-05-05
  • Javascript操作select控件代碼實(shí)例

    Javascript操作select控件代碼實(shí)例

    這篇文章主要介紹了Javascript操作select控件代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • JQuery加載圖片自適應(yīng)固定大小的DIV

    JQuery加載圖片自適應(yīng)固定大小的DIV

    在固定大小的div中放置一個(gè)圖片,當(dāng)圖片較小時(shí)顯示實(shí)際大小,當(dāng)圖片超過div大小時(shí)圖片 自動(dòng)適應(yīng)div 的大小,實(shí)現(xiàn)思路如下,感興趣的朋友可以了解下
    2013-09-09
  • BootStrap入門學(xué)習(xí)第一篇

    BootStrap入門學(xué)習(xí)第一篇

    這篇文章主要為大家詳細(xì)介紹了BootStrap入門學(xué)習(xí)第一篇,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • javascript 通用loading動(dòng)畫效果實(shí)例代碼

    javascript 通用loading動(dòng)畫效果實(shí)例代碼

    這篇文章主要介紹了javascript 通用loading動(dòng)畫效果實(shí)例代碼,有需要的朋友可以參考一下
    2014-01-01
  • js實(shí)現(xiàn)簡單隨機(jī)抽獎(jiǎng)的方法

    js實(shí)現(xiàn)簡單隨機(jī)抽獎(jiǎng)的方法

    這篇文章主要介紹了js實(shí)現(xiàn)簡單隨機(jī)抽獎(jiǎng)的方法,涉及字符串的操作、setInterval定時(shí)調(diào)用等技巧,需要的朋友可以參考下
    2015-01-01
  • 一文讀懂JS中的var/let/const和暫時(shí)性死區(qū)

    一文讀懂JS中的var/let/const和暫時(shí)性死區(qū)

    這篇文章主要為大家詳細(xì)介紹了JavaScript中的var、let、const和暫時(shí)性死區(qū)的異同,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-02-02
  • javascript實(shí)現(xiàn)貪吃蛇經(jīng)典游戲

    javascript實(shí)現(xiàn)貪吃蛇經(jīng)典游戲

    這篇文章主要為大家詳細(xì)介紹了javascript實(shí)現(xiàn)貪吃蛇經(jīng)典游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • js-FCC算法-No repeats please字符串的全排列(詳解)

    js-FCC算法-No repeats please字符串的全排列(詳解)

    下面小編就為大家?guī)硪黄猨s-FCC算法-No repeats please字符串的全排列(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • javascript 動(dòng)態(tài)修改css樣式方法匯總(四種方法)

    javascript 動(dòng)態(tài)修改css樣式方法匯總(四種方法)

    為了達(dá)到某種特殊的效果我們需要用Javascript動(dòng)態(tài)的去更改某一個(gè)標(biāo)簽的Css屬性,如何動(dòng)態(tài)修改css樣式呢?面對(duì)這個(gè)問題,小編帶領(lǐng)大家來解決javascript動(dòng)態(tài)修改css樣式,小伙伴們都快來學(xué)習(xí)吧
    2015-08-08

最新評(píng)論

滁州市| 宁波市| 池州市| 澄城县| 逊克县| 邹城市| 肇东市| 定州市| 扬州市| 保山市| 罗平县| 应城市| 晋宁县| 鄂伦春自治旗| 西贡区| 巴里| 阿勒泰市| 宁海县| 嵊泗县| 建瓯市| 确山县| 巫溪县| 平遥县| 祥云县| 郴州市| 盐池县| 襄城县| 吴桥县| 眉山市| 兴业县| 东山县| 福州市| 益阳市| 津南区| 凤庆县| 巴里| 宜兴市| 通河县| 雅江县| 商丘市| 遂平县|