亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

淺談nodejs中的類定義和繼承的套路

2019-11-19 15:59:06
字體:
來源:轉載
供稿:網友

javascript是一門極其靈活的語言。

靈活到你無法忍受!

我個人喜歡強類型的語言,例如c/c++,c#等。

但是js代表著未來,所以需要學習。

js中類定義以及繼承有n多種方式,現在來學習一下nodejs類定義以及繼承的固定套路。

套路1. 在構造函數(constructor)中總是使用instanceof操作符:

function Base() {  if (!(this instanceof Base)) {    return new Base();  }}

上述代碼的含義就是: 如果Base這個函數調用時沒有使用new操作符,則會自動調用new操作符,返回Base的實例

套路2. 所有成員變量定義在構造函數(constructor)中

function Base() {  if (!(this instanceof Base)) {    return new Base();  }  //開始成員變量定義  this.className = "Base";}

套路3. 所有的成員方法以函數表達式方式定義在原型(prototype)中【為什么要這樣,其原因在套路4中的inherits源碼注釋中】

Base.prototype.printClassName = function(){   console.log(this.className);}

調用如下:

var base = Base(); //不使用new操作符,直接進行函數調用,自動調用new操作符console.log(base.className);base.printClassName();

套路4. 使用util.inherits(子類,父類)進行原型(prototype)繼承

先來看一下inherits的源碼:

var inherits = function(ctor, superCtor) {  //嚴格相等測試:undefined/null  //子類構造函數必須存在  if (ctor === undefined || ctor === null)    throw new TypeError('The constructor to "inherits" must not be ' +      'null or undefined');  //嚴格相等測試:undefined/null  //父類構造函數必須存在  if (superCtor === undefined || superCtor === null)    throw new TypeError('The super constructor to "inherits" must not ' +      'be null or undefined');  //要點: 如果要繼承的話,父類必須要有prototype對象  //這也是為什么將所有成員方法都定義在prototype對象中?。?!  if (superCtor.prototype === undefined)    throw new TypeError('The super constructor to "inherits" must ' +      'have a prototype');  //讓子類構造函數對象增加一個super_指針,指向父類,這樣就形成繼承鏈  ctor.super_ = superCtor;  //調用Object.setPrototypeOf(子類的prototype,父類的prototype)  Object.setPrototypeOf(ctor.prototype, superCtor.prototype);};

Object.setPrototypeOf : 該鏈接可以了解一下setPrototypeOf方法,非常簡單,其Polyfill如下:

// 僅適用于Chrome和FireFox,在IE中不工作:Object.setPrototypeOf = Object.setPrototypeOf || function (obj, proto) { obj.__proto__ = proto; return obj; }

我們來測試一下繼承。

先定義子類

function Child() {  //老樣子,套路1  if (!(this instanceof Child)) {    return new Child();  }}

然后根據套路4, 調用inherits函數進行原型繼承

//注意,inherits調用不在構造函數,也不在原型對象,而是全局調用inherits(Child, Base);

最后我們調用一下child的printClassName方法,該方法在基類原型對象中實現。

子類調用基類函數-undefined.png

出現錯誤,child.printClassName()后輸出undefined!

為什么呢?

套路5. 子類的構造函數中使用 父類.call(this),實現父類構造函數中的成員變量繼承

function Child() {  //老樣子,套路1  if (!(this instanceof Child)) {    return new Child();  }  //增加這句話,在調用printClassName就能正常的輸出Base字符串  Base.call(this);  //如果要更新基類的成員變量,請在Base.call(this)之后!  this._className = "Child"; //調用printClassName就能正常的輸出Child字符串}

Function.prototype.call()

由此可見,nodejs中的繼承需要:

在構造函數中調用 父類.call(this),實現父類成員變量的繼承

全局調用inherits(子類,父類) 進行父類成員函數的繼承

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美性高潮床叫视频| 国产热re99久久6国产精品| 欧美激情视频网站| 久久精品中文字幕| 久久激情视频久久| 亚洲免费电影在线观看| 精品毛片三在线观看| 日韩高清av在线| 国产91ⅴ在线精品免费观看| 欧美亚洲国产成人精品| 久久九九有精品国产23| 国内自拍欧美激情| 国产精品高潮呻吟视频| 国产精品热视频| 欧美精品亚州精品| 欧美成人自拍视频| 日韩精品视频在线观看网址| 国产91精品青草社区| 一个人看的www欧美| 国产精品自产拍在线观看| 亚洲精品综合久久中文字幕| 国产精品国产福利国产秒拍| 欧美大奶子在线| 国产精品视频自在线| 91精品国产综合久久久久久久久| 成人免费网站在线观看| 国产一区二区成人| 欧美极品少妇xxxxⅹ裸体艺术| 成人免费福利视频| 国产成人精品在线播放| 蜜臀久久99精品久久久无需会员| 国产一区二区三区毛片| y97精品国产97久久久久久| 91在线观看免费观看| 国产999精品久久久影片官网| 久久久久久国产三级电影| 国产精品自在线| 97精品一区二区视频在线观看| 久久久久久久久久久亚洲| 美女少妇精品视频| 精品视频在线导航| 日韩中文字幕视频在线| 亚洲性线免费观看视频成熟| 亚洲免费小视频| 亚洲男人av电影| 国产精品丝袜久久久久久高清| 亚洲福利视频免费观看| 91国内免费在线视频| 97视频在线观看视频免费视频| 色av中文字幕一区| 亚洲性av在线| 亚洲精品一区中文| 欧美色道久久88综合亚洲精品| 国产99久久精品一区二区永久免费| 2019中文字幕在线观看| 欧美激情免费观看| 国产精品自产拍在线观| 亚洲色图av在线| 中文字幕亚洲一区二区三区| 色先锋久久影院av| 91视频九色网站| 日韩久久精品电影| 91av在线播放视频| 国产福利精品av综合导导航| 一区二区三欧美| 欧美国产精品va在线观看| 国产精品人人做人人爽| 中文字幕欧美专区| 91免费国产视频| 日韩在线免费高清视频| 国产精品一区二区av影院萌芽| 久久精品国产亚洲7777| 成人黄色在线播放| 亚洲图片在线综合| 91免费精品国偷自产在线| 亚洲成人精品久久| 国产亚洲美女久久| 久久久之久亚州精品露出| 欧美理论电影在线播放| 综合网中文字幕| 亚洲国产91精品在线观看| 亚洲成人黄色在线观看| 国产精品老女人视频| 国产精品视频自拍| 精品国产一区二区在线| 992tv成人免费视频| 一本一本久久a久久精品综合小说| 欧美一级bbbbb性bbbb喷潮片| 亚洲色图综合久久| 91超碰中文字幕久久精品| 中文字幕久久久av一区| 欧美日在线观看| 最近2019中文字幕在线高清| 国产高清在线不卡| 国产精品h片在线播放| 神马久久久久久| 日韩一区视频在线| 91亚洲va在线va天堂va国| 一区二区三区在线播放欧美| 欧美日韩国产丝袜另类| 亚洲成人免费在线视频| 成人h视频在线| 日韩欧美亚洲国产一区| 久久久久久高潮国产精品视| 精品一区二区亚洲| 激情成人在线视频| 亚洲开心激情网| 国产成人精品综合| 自拍偷拍亚洲一区| 欧美成人午夜免费视在线看片| 欧美视频第一页| 日本久久久久久久久| 欧美精品在线免费| 亚洲女人被黑人巨大进入| 92福利视频午夜1000合集在线观看| 国产999精品| 精品亚洲夜色av98在线观看| 亚洲国产日韩欧美在线99| 一本一本久久a久久精品牛牛影视| 在线播放日韩精品| 国产成人在线播放| 欧美精品videosex性欧美| 亚洲图片制服诱惑| 91久久在线视频| 日韩av网址在线| 精品精品国产国产自在线| 国产精品久久久久久久一区探花| 国产亚洲精品91在线| 欧美色欧美亚洲高清在线视频| 国产日韩中文字幕在线| 美女av一区二区| 久久久精品在线| 欧美成人精品不卡视频在线观看| 欧美日韩免费看| 国产精品免费看久久久香蕉| 欧美激情国内偷拍| 色综合天天综合网国产成人网| 国产区亚洲区欧美区| 国产精品草莓在线免费观看| 91久久久久久| 亚洲天堂网在线观看| 三级精品视频久久久久| 爱福利视频一区| 欧美不卡视频一区发布| 国模视频一区二区三区| 欧美裸体xxxx极品少妇软件| 久久久久久这里只有精品| 久久成人亚洲精品| 永久免费精品影视网站| 午夜精品美女自拍福到在线| 91久久综合亚洲鲁鲁五月天| 91理论片午午论夜理片久久| 97**国产露脸精品国产| 欧美色视频日本版| 欧美第一黄色网| 另类专区欧美制服同性| 亚洲国产成人一区| 久久久久久成人精品| 中文字幕精品一区久久久久| 91福利视频网| 色先锋资源久久综合5566| 日韩亚洲国产中文字幕| 成人www视频在线观看| 欧美精品情趣视频|