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

首頁 > 編程 > JavaScript > 正文

javascript中的3種繼承實現方法

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

使用Object.create實現類式繼承

下面是官網的一個例子

//Shape - superclassfunction Shape() { this.x = 0; this.y = 0;}Shape.prototype.move = function(x, y) {  this.x += x;  this.y += y;  console.info("Shape moved.");};// Rectangle - subclassfunction Rectangle() { Shape.call(this); //call super constructor.}Rectangle.prototype = Object.create(Shape.prototype);var rect = new Rectangle();rect instanceof Rectangle //true.rect instanceof Shape //true.rect.move(1, 1); //Outputs, "Shape moved."

此時Rectangle原型的constructor指向父類,如需要使用自身的構造,手動指定即可,如下

Rectangle.prototype.constructor = Rectangle;

使用utilities工具包自帶的util.inherites

語法

util.inherits(constructor, superConstructor)
例子

const util = require('util');const EventEmitter = require('events');function MyStream() {  EventEmitter.call(this);}util.inherits(MyStream, EventEmitter);MyStream.prototype.write = function(data) {  this.emit('data', data);}var stream = new MyStream();console.log(stream instanceof EventEmitter); // trueconsole.log(MyStream.super_ === EventEmitter); // truestream.on('data', (data) => { console.log(`Received data: "${data}"`);})stream.write('It works!'); // Received data: "It works!"

也很簡單的例子,其實源碼用了ES6的新特性,我們瞅一瞅

exports.inherits = function(ctor, superCtor) { if (ctor === undefined || ctor === null)  throw new TypeError('The constructor to "inherits" must not be ' +            'null or undefined'); if (superCtor === undefined || superCtor === null)  throw new TypeError('The super constructor to "inherits" must not ' +            'be null or undefined'); if (superCtor.prototype === undefined)  throw new TypeError('The super constructor to "inherits" must ' +            'have a prototype'); ctor.super_ = superCtor; Object.setPrototypeOf(ctor.prototype, superCtor.prototype);};

其中Object.setPrototypeOf即為ES6新特性,將一個指定的對象的原型設置為另一個對象或者null

語法

Object.setPrototypeOf(obj, prototype)
obj為將要被設置原型的一個對象
prototype為obj新的原型(可以是一個對象或者null).

如果設置成null,即為如下示例

Object.setPrototypeOf({}, null);
感覺setPrototypeOf真是人如其名啊,專門搞prototype來玩。
那么這個玩意又是如何實現的呢?此時需要借助宗師__proto__

Object.setPrototypeOf = Object.setPrototypeOf || function (obj, proto) { obj.__proto__ = proto; return obj; }

即把proto賦給obj.__proto__就好了。

使用extends關鍵字

熟悉java的同學應該非常熟悉這個關鍵字,java中的繼承都是靠它實現的。
ES6新加入的class關鍵字是語法糖,本質還是函數.

在下面的例子,定義了一個名為Polygon的類,然后定義了一個繼承于Polygon的類 Square。注意到在構造器使用的 super(),supper()只能在構造器中使用,super函數一定要在this可以使用之前調用。

class Polygon { constructor(height, width) {  this.name = 'Polygon';  this.height = height;  this.width = width; }}class Square extends Polygon { constructor(length) {  super(length, length);  this.name = 'Square'; }}

使用關鍵字后就不用婆婆媽媽各種設置原型了,關鍵字已經封裝好了,很快捷方便。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
77777少妇光屁股久久一区| 色偷偷9999www| 亚洲人成在线电影| 91久久久国产精品| 夜夜嗨av一区二区三区免费区| 色综合视频一区中文字幕| 国产91精品久久久久| 4438全国成人免费| 国产综合福利在线| 91精品国产成人www| 亚洲激情视频在线播放| 日韩在线观看网址| 91久久精品国产| 成人黄色生活片| 日韩中文在线观看| 久久精品久久久久电影| 久久精品久久久久电影| 在线成人免费网站| 国精产品一区一区三区有限在线| 久久香蕉国产线看观看av| 亚洲欧美日韩中文视频| 日韩精品极品在线观看| 日本精品免费观看| 亚洲aⅴ男人的天堂在线观看| 日韩高清av在线| 日韩av中文字幕在线免费观看| 26uuu日韩精品一区二区| 欧美中文字幕在线视频| 国内免费久久久久久久久久久| 国产成人精品网站| 中文字幕国产日韩| 日韩在线高清视频| 久久久久久久久久久人体| 免费不卡欧美自拍视频| 日韩高清a**址| 国模叶桐国产精品一区| 国产精品91一区| 中文国产成人精品| 国产成人福利网站| 精品视频一区在线视频| 97精品一区二区视频在线观看| 欧美高清在线观看| 欧美肥婆姓交大片| 国产一区二区三区毛片| 91精品视频网站| 91久久精品国产91久久性色| 色悠悠国产精品| **欧美日韩vr在线| 亚洲tv在线观看| 在线日韩av观看| 国产精品91久久久久久| 午夜精品一区二区三区在线| 中文字幕亚洲第一| 91久久在线播放| 亚洲的天堂在线中文字幕| 国产亚洲精品成人av久久ww| 成人av在线天堂| 久久久久久久久中文字幕| 亚洲伊人久久综合| 在线国产精品播放| 色一区av在线| 欧美国产日韩一区二区三区| 精品久久在线播放| 久久精品国产一区二区电影| 97视频在线观看免费高清完整版在线观看| 亚洲精品久久7777777| 精品视频在线播放免| 久久久国产精品亚洲一区| 国产精品精品视频| 在线播放日韩av| 亚洲日韩中文字幕在线播放| 亚洲精品av在线播放| 精品国产成人在线| 91亚洲国产成人精品性色| 亚洲综合自拍一区| 国产精品免费久久久久影院| 国产成人亚洲综合91精品| 国产福利视频一区| 久久天天躁日日躁| 成人在线中文字幕| 91av在线播放视频| 久久精品夜夜夜夜夜久久| 亚洲日本aⅴ片在线观看香蕉| 91高清免费在线观看| 欧美性猛交xxxx富婆弯腰| 欧美亚洲视频在线看网址| 亚洲精品少妇网址| 日韩精品中文字幕在线观看| 欧美小视频在线| 日韩免费精品视频| 91久久久久久| 亚洲a级在线播放观看| 成人免费淫片aa视频免费| 亚洲国产精品成人av| 日韩在线免费av| 久久久91精品| 91免费的视频在线播放| 国产精品一区二区三区免费视频| 福利视频第一区| 在线播放国产一区二区三区| 日韩欧美国产高清91| 一本一本久久a久久精品牛牛影视| 黑人精品xxx一区| 91av视频在线免费观看| 国产精品亚洲аv天堂网| 欧美高清在线播放| 国产成人精品免费久久久久| 国产在线播放91| 久久全国免费视频| 色综合久久88| 色av吧综合网| 国产精品中文久久久久久久| 欧美日韩在线看| 国产亚洲欧美日韩精品| 日本精品免费一区二区三区| 欧美日韩第一视频| 亚洲人成网站色ww在线| 亚洲欧美中文字幕在线一区| 日韩免费av一区二区| 国产精品黄视频| 国产69精品久久久久久| 亚洲欧美在线免费| 亚洲成年人在线播放| 亚洲另类激情图| 日韩在线资源网| 精品小视频在线| 欧美电影免费观看高清完整| 2020国产精品视频| 久久精品99久久久香蕉| 91精品久久久久久| 欧美精品www在线观看| 成人网在线视频| 国产亚洲精品美女久久久| 亚洲性av网站| 91免费视频网站| 中文字幕精品在线视频| 国产精品自拍网| 国产欧美精品va在线观看| 日韩国产精品亚洲а∨天堂免| 青青久久av北条麻妃黑人| 亚洲乱码av中文一区二区| 亚洲欧美国内爽妇网| 国产欧美日韩亚洲精品| 懂色aⅴ精品一区二区三区蜜月| 国产区精品视频| 欧美亚洲在线播放| 国产精品视频区1| 亚洲精品理论电影| 欧美精品久久久久久久| 亚洲电影免费观看高清| 欧美性xxxxxx| 亚洲精品资源在线| 亚洲欧美中文日韩v在线观看| 欧美日本中文字幕| 国产精品天天狠天天看| 一区二区欧美日韩视频| 国模精品系列视频| 精品一区二区三区三区| 日韩风俗一区 二区| 91夜夜未满十八勿入爽爽影院| 久久综合五月天| 色系列之999| 国产亚洲xxx| 亚洲精品一区二三区不卡|