国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JS 設(shè)計(jì)模式 三(繼承)

shusen / 1021人閱讀

摘要:什么是繼承繼承是一種減少重復(fù)性代碼的一種設(shè)計(jì)模式,盡量弱化對(duì)象間耦合,開(kāi)閉原則的一種很好的實(shí)現(xiàn)。三摻元類這種繼承方式是為了擴(kuò)充類的一些重復(fù)函數(shù)而不重寫(xiě)代碼,這個(gè)也是一種多繼承的效果。所以在使用的繼承前,最好可以很好的理解下原型鏈這個(gè)概念。

什么是繼承

繼承是一種減少重復(fù)性代碼的一種設(shè)計(jì)模式,盡量弱化對(duì)象間耦合,開(kāi)閉原則的一種很好的實(shí)現(xiàn)。

javascript繼承

由于javascript的語(yǔ)言特性,它的繼承也被分為了3中實(shí)現(xiàn)方式

一、類繼承
function extend(subClass, superClass) {
  var F = function () {
  };
  F.prototype = superClass.prototype;
  subClass.prototype = new F();
  subClass.prototype.constructor = subClass;

  subClass.superclass = superClass.prototype;
  if (superClass.prototype.constructor == Object.prototype.constructor) {
    superClass.prototype.constructor = superClass;
  }
}

function Person(name) {
  this.name = name;
}
Person.prototype.getName = function () {
  return this.name;
}
function Author(name, books) {
  Author.superclass.constructor.call(this, name);
  this.books = books;
}
extend(Author, Person);
Author.prototype.getBooks = function () {
  return this.books;
};
Author.prototype.getName = function () {
  var name = Author.superclass.getName.call(this);
  return name + ", Author of " + this.getBooks().join(", ");
};

var hugo = new Author("hugo", ["Notre-Dame de Paris"]);
hugo.getName();
hugo.getBooks();

這種繼承方式比較適合不熟悉javascript語(yǔ)言原型的程序員使用。

二、原型繼承
function clone(object) {
  function F() {
  }

  F.prototype = object;
  return new F;
}

var Person = {
  name: "默認(rèn)值",
  getName: function () {
    return this.name;
  }
}

var Author = clone(Person);
Author.books = []; // Default value.
Author.getBooks = function() {
  return this.books;
}
hugo = clone(Author);
hugo.name = "hugo";
hugo.books =["Notre-Dame de Paris"];
hugo.getName();
hugo.getBooks();

這種繼承比較節(jié)約內(nèi)存。但是理解更加復(fù)雜。起屬性默認(rèn)值指向父類屬性。

三、摻元類
function augment(receivingClass, givingClass) {
  if(arguments[2]) { // Only give certain methods.
    for(var i = 2, len = arguments.length; i < len; i++) {
      receivingClass.prototype[arguments[i]] = givingClass.prototype[arguments[i]];
    }
  }
  else { // Give all methods.
    for(methodName in givingClass.prototype) {
      if(!receivingClass.prototype[methodName]) {
        receivingClass.prototype[methodName] = givingClass.prototype[methodName];
      }
    }
  }
}

var Mixin = function() {};
Mixin.prototype = {
  serialize: function() {
    var output = [];
    for(key in this) {
      output.push(key + ": " + this[key]);
    }
    return output.join(", ");
  }
};

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

augment(Person, Mixin,"serialize");
var hugo = new Person("hugo");
hugo.serialize();

這種繼承方式是為了擴(kuò)充類的一些重復(fù)函數(shù)而不重寫(xiě)代碼,這個(gè)也是一種多繼承的效果。

總結(jié)

javascript的繼承大體上使用原型的方式會(huì)比較節(jié)省內(nèi)存空間,不過(guò)也有一定的使用難度。不過(guò)在理解了原型以后就可以這是一種非常簡(jiǎn)化的繼承方式,對(duì)于擴(kuò)展也很方便。所以在使用javascript的繼承前,最好可以很好的理解下原型鏈這個(gè)概念。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/87760.html

相關(guān)文章

  • Javascript 設(shè)計(jì)模式讀書(shū)筆記()——繼承

    摘要:的繼承方式屬于原型式繼承,非常靈活。當(dāng)使用關(guān)鍵字執(zhí)行類的構(gòu)造函數(shù)時(shí),系統(tǒng)首先創(chuàng)建一個(gè)新對(duì)象,這個(gè)對(duì)象會(huì)繼承自構(gòu)造函數(shù)的原型對(duì)象新對(duì)象的原型就是構(gòu)造函數(shù)的屬性。也就是說(shuō),構(gòu)造函數(shù)用來(lái)對(duì)生成的新對(duì)象進(jìn)行一些處理,使這個(gè)新對(duì)象具有某些特定的屬性。 繼承這個(gè)東西在Javascript中尤其復(fù)雜,我掌握得也不好,找工作面試的時(shí)候在這個(gè)問(wèn)題上栽過(guò)跟頭。Javascript的繼承方式屬于原型式繼承,...

    cangck_X 評(píng)論0 收藏0
  • js面向?qū)ο鬁\談(

    摘要:還有一個(gè)問(wèn)題,就是不能在創(chuàng)建子類性時(shí),像父類型的構(gòu)造函數(shù)傳遞參數(shù)。組合繼承將原型鏈和借用構(gòu)造函數(shù)組合到一起,發(fā)揮兩者之長(zhǎng)的一張繼承模式,下面來(lái)看個(gè)例子。組合繼承最大的問(wèn)題是無(wú)論在什么情況下,都會(huì)調(diào)用兩次父類型構(gòu)造函數(shù)。 繼承 繼承是面向?qū)ο笳Z(yǔ)言中特別重要的概念,js的繼承主要是靠原型鏈實(shí)現(xiàn)的。 原型鏈!!! 看到我給標(biāo)題打了三個(gè)嘆號(hào)嗎,這里真的很重要!這里真的很重要!這里真的很重要!j...

    awkj 評(píng)論0 收藏0
  • React.js 小書(shū) Lesson4 - 前端組件化():抽象出公共組件類

    摘要:最后抽離出來(lái)了一個(gè)類,可以幫助我們更好的做組件化。一個(gè)組件有自己的顯示形態(tài)上面的結(jié)構(gòu)和內(nèi)容行為,組件的顯示形態(tài)和行為可以由數(shù)據(jù)狀態(tài)和配置參數(shù)共同決定。接下來(lái)我們開(kāi)始正式進(jìn)入主題,開(kāi)始正式介紹。下一節(jié)鏈接直達(dá)小書(shū)基本環(huán)境安裝 React.js 小書(shū) Lesson4 - 前端組件化(三):抽象出公共組件類 本文作者:胡子大哈本文原文:http://huziketang.com/books...

    jsbintask 評(píng)論0 收藏0
  • JS面向?qū)ο蟮某绦?em>設(shè)計(jì)之繼承的實(shí)現(xiàn) - 原型鏈

    摘要:簡(jiǎn)單回顧一下構(gòu)造函數(shù)原型和實(shí)例對(duì)象之間的關(guān)系每個(gè)構(gòu)造函數(shù)都有一個(gè)原型對(duì)象。找到生成構(gòu)造函數(shù)的原型對(duì)象的構(gòu)造函數(shù),搜索其原型對(duì)象,找到了。 JS面向?qū)ο蟮某绦蛟O(shè)計(jì)之繼承的實(shí)現(xiàn) - 原型鏈 前言:最近在細(xì)讀Javascript高級(jí)程序設(shè)計(jì),對(duì)于我而言,中文版,書(shū)中很多地方翻譯的差強(qiáng)人意,所以用自己所理解的,嘗試解讀下。如有紕漏或錯(cuò)誤,會(huì)非常感謝您的指出。文中絕大部分內(nèi)容引用自《JavaS...

    zhaochunqi 評(píng)論0 收藏0
  • 18年求職面經(jīng)及總結(jié)

    摘要:年求職面經(jīng)及總結(jié)我的求職之路差不多走到盡頭了感覺(jué)真是精疲力盡了把這大半年的經(jīng)歷和面試總結(jié)寫(xiě)下來(lái)希望能給和我一樣在求職路上煎熬的人一點(diǎn)幫助先說(shuō)背景微電子科學(xué)與工程專業(yè)學(xué)過(guò)兩門和相關(guān)的課程語(yǔ)言和單片機(jī)這個(gè)專業(yè)的唯一好處就是大部分人并不知道這個(gè)專 18年求職面經(jīng)及總結(jié) 我的求職之路差不多走到盡頭了,感覺(jué)真是精疲力盡了.把這大半年的經(jīng)歷和面試總結(jié)寫(xiě)下來(lái),希望能給和我一樣在求職路上煎熬的人一點(diǎn)幫...

    zhangwang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<