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

首頁 > 網站 > WEB開發 > 正文

ES5和ES6中對于繼承的實現方法

2024-04-27 15:15:56
字體:
來源:轉載
供稿:網友

在ES5繼承的實現非常有趣的,由于沒有傳統面向對象類的概念,javascript利用原型鏈的特性來實現繼承,這其中有很多的屬性指向和需要注意的地方。

原型鏈的特點和實現已經在之前的一篇整理說過了,就是通過將子類構造函數的原型作為父類構造函數的實例(sub.PRototype=new super),這樣就連通了子類-子類原型-父類,原型鏈的特點就是逐層查找,從子類開始一直往上直到所有對象的原型Object.prototype,找到屬性方法之后就會停止查找,所以下層的屬性方法會覆蓋上層。

一個基本的基于原型鏈的繼承過程大概是這樣的:

//先來個父類,帶些屬性function Super(){    this.flag = true;}//為了提高復用性,方法綁定在父類原型屬性上Super.prototype.getFlag = function(){    return this.flag;}//來個子類function Sub(){    this.subFlag = false;}//實現繼承Sub.prototype = new Super;//給子類添加子類特有的方法,注意順序要在繼承之后Sub.prototype.getSubFlag = function(){    return this.subFlag;}//構造實例var es5 = new Sub;原型鏈實現的繼承主要有幾個問題:1、本來我們為了構造函數屬性的封裝私有性,方法的復用性,提倡將屬性聲明在構造函數內,而將方法綁定在原型對象上,但是現在子類的原型是父類的一個實例,自然父類的屬性就變成子類原型的屬性了;這就會帶來一個問題,我們知道構造函數的原型屬性在所有構造的實例中是共享的,所以原型中屬性的改變會反應到所有的實例上,這就違背了我們想要屬性私有化的初衷;2、創建子類的實例時,不能向父類的構造函數傳遞參數

function Super(){    this.flag = true;}function Sub(){   this.subFlag = false;}Sub.prototype = new Super;var obj = new Sub();obj.flag = flase;  //修改之后,由于是原型上的屬性,之后創建的所有實例都會受到影響var obj_2 = new Sub();console.log(obj.flag)  //false;

為了解決以上兩個問題,有一個叫借用構造函數的方法只需要在子類構造函數內部使用apply或者call來調用父類的函數即可在實現屬性繼承的同時,又能傳遞參數,又能讓實例不互相影響

function Super(){    this.flag = true;}function Sub(){    Super.call(this)  //如果父類可以需要接收參數,這里也可以直接傳遞}var obj = new Sub();obj.flag = flase;var obj_2 = new Sub();console.log(obj.flag)  //依然是true,不會相互影響結合借用構造函數和原型鏈的方法,可以實現比較完美的繼承方法,可以稱為組合繼承:

function Super(){    this.flag = true;}Super.prototype.getFlag = function(){    return this.flag;     //繼承方法}function Sub(){    this.subFlag = flase    Super.call(this)    //繼承屬性}Sub.prototype = new Super;var obj = new Sub();Sub.prototype.constructor = Sub;Super.prototype.getSubFlag = function(){    return this.flag;}
function Box(age) {this.name = ['Lee', 'Jack', 'Hello']this.age = age;}Box.prototype.run = function () {return this.name + this.age;};function Desk(age) {Box.call(this, age); //對象冒充}Desk.prototype = new Box(); //原型鏈繼承var desk = new Desk(100);alert(desk.run());

這里還有個小問題,Sub.prototype = new Super; 會導致Sub.prototype的constructor指向Super;然而constructor的定義是要指向原型屬性對應的構造函數的,Sub.prototype是Sub構造函數的原型,所以應該添加一句糾正:Sub.prototype.constructor = Sub;

看完ES5的實現,再來看看ES6的繼承實現方法,其內部其實也是ES5組合繼承的方式,通過call借用構造函數,在A類構造函數中調用相關屬性,再用原型鏈的連接實現方法的繼承

class B extends A {  constructor() {    return A.call(this);  //繼承屬性  }}A.prototype = new B;  //繼承方法ES6封裝了class,extends關鍵字來實現繼承,內部的實現原理其實依然是基于上面所講的原型鏈,不過進過一層封裝后,Javascript的繼承得以更加簡潔優雅地實現

class ColorPoint extends Point {  constructor(x, y, color) {    super(x, y); // 等同于parent.constructor(x, y)    this.color = color;  }  toString() {    return this.color + ' ' + super.toString(); // 等同于parent.toString()  }}通過constructor來定義構造函數,用super調用父類的屬性方法

轉至:http://www.jianshu.com/p/342966fdf816


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日本国产欧美一区二区三区| 欧美高清无遮挡| 国产成人午夜视频网址| 日韩一级裸体免费视频| 国产一区二区三区三区在线观看| 国产成人精品免费久久久久| 亚洲小视频在线观看| 中文精品99久久国产香蕉| 久久精品国产欧美亚洲人人爽| 午夜精品久久久久久99热软件| 国语自产精品视频在线看抢先版图片| 国产视频福利一区| 国产成+人+综合+亚洲欧美丁香花| 久久精品视频免费播放| 亚洲码在线观看| 欧美极品美女视频网站在线观看免费| 亚洲中国色老太| 国产精品欧美激情在线播放| 粉嫩老牛aⅴ一区二区三区| 色老头一区二区三区在线观看| 日韩在线观看免费高清完整版| 国产精品色婷婷视频| 欧美视频免费在线观看| 久久精品国产69国产精品亚洲| 亚洲欧洲在线观看| 尤物九九久久国产精品的分类| 91免费看片在线| 在线视频欧美日韩| 中文字幕精品在线视频| 欧美贵妇videos办公室| 亚洲第一精品福利| 国产精品一区二区久久精品| 欧美激情中文网| 亚洲综合大片69999| 欧美激情中文字幕在线| 亚洲国产精品99久久| 欧美一级视频免费在线观看| 久久理论片午夜琪琪电影网| 97在线观看视频| 国产aⅴ夜夜欢一区二区三区| 日韩av免费观影| 搡老女人一区二区三区视频tv| 日韩精品在线免费观看| 超碰精品一区二区三区乱码| 国产精品丝袜高跟| 亚洲国产日韩欧美在线动漫| 亚洲理论电影网| 国模视频一区二区| 欧美激情喷水视频| 国产精品欧美亚洲777777| 日韩精品免费综合视频在线播放| 国产精品亚洲一区二区三区| 成人妇女免费播放久久久| 91九色国产社区在线观看| 国内精品一区二区三区四区| 国产精品偷伦视频免费观看国产| 欧美性生交xxxxx久久久| 国产精品一区二区女厕厕| 日本久久久a级免费| 97热精品视频官网| 日韩经典中文字幕在线观看| 亚洲夜晚福利在线观看| 日韩在线观看av| 92看片淫黄大片看国产片| 亚洲美女视频网站| 日韩成人性视频| 日韩欧美在线网址| 91老司机精品视频| 日韩av手机在线| 北条麻妃一区二区在线观看| 亚洲欧美激情另类校园| 成人黄色在线播放| 欧美性猛交xxxx乱大交蜜桃| 亚洲无线码在线一区观看| 久久乐国产精品| 欧美午夜视频在线观看| 国产精品第8页| 色偷偷av亚洲男人的天堂| 国产日韩视频在线观看| 亚洲网站在线播放| 欧美成人午夜激情| 亚洲xxxxx| 91国内精品久久| 久久精品99久久久香蕉| 91夜夜揉人人捏人人添红杏| 黄色成人在线播放| 国产精品99免视看9| 日av在线播放中文不卡| 亚洲成人免费网站| 亚洲色图狂野欧美| 欧美最猛性xxxxx免费| 亚洲欧洲国产精品| 午夜精品久久久久久久99热| 欧美日韩国产va另类| 欧美精品福利视频| 欧美电影在线观看网站| 国模精品一区二区三区色天香| 亚洲欧美一区二区三区在线| 欧美疯狂做受xxxx高潮| 国产做受高潮69| 亚洲国产美女精品久久久久∴| 日韩免费看的电影电视剧大全| 欧美日韩成人黄色| 欧美激情在线观看| www.日韩系列| 日韩av不卡在线| 成人a级免费视频| 亚洲欧美成人一区二区在线电影| 国产视频一区在线| 亚洲免费电影在线观看| 97久久久免费福利网址| 欧美一区三区三区高中清蜜桃| 色婷婷综合久久久久中文字幕1| 国产91精品在线播放| 97视频免费在线观看| 日韩中文理论片| 亚洲成人精品久久| 成人免费xxxxx在线观看| 国产成人精品久久久| 亚洲精品美女在线| 欧美日韩精品在线| 亚洲国产精品福利| 欧美日韩成人黄色| 日本欧美爱爱爱| 欧美激情在线有限公司| 亚洲精品小视频| 91久久久久久久久久| 亚洲最大的成人网| 欧美日韩ab片| 欧美成人午夜激情在线| 亚洲色图欧美制服丝袜另类第一页| 国产精品亚洲视频在线观看| 国产日韩av在线| 91国产美女在线观看| 欧美激情视频一区二区三区不卡| 亚洲视频自拍偷拍| 国产一区欧美二区三区| 亚洲电影免费观看高清完整版| 黑人极品videos精品欧美裸| 久久精品国产精品亚洲| 日韩视频免费在线| 在线电影欧美日韩一区二区私密| 2023亚洲男人天堂| 九九九久久国产免费| 91国产视频在线| 亚洲精品久久久久久久久| 伊人久久久久久久久久久| 国产女人18毛片水18精品| 久久久久久久久久国产| 亚洲国产欧美一区二区三区久久| 亚洲欧美日韩久久久久久| 欧美尤物巨大精品爽| 亚洲精品美女视频| 国产成人精品视| 91av视频在线| 国产精品午夜一区二区欲梦| 自拍偷拍亚洲在线| 欧美日韩精品在线| 国产精品一区二区女厕厕| 97超视频免费观看| 色妞久久福利网| 91免费国产网站| 亚洲一区二区久久久久久| 国产精品成熟老女人|