站長資訊網
        最全最豐富的資訊網站

        es6繼承和es5繼承的區別是什么

        es5和es6繼承的區別: ES5的繼承是通過原型或構造函數機制實現的;它先創建子類,再實例化父類并添加到子類this中。 ES6先創建父類,再實例化子集中通過調用super方法訪問父級后,再通過修改this實現繼承。

        es6繼承和es5繼承的區別是什么

        本教程操作環境:windows7系統、ECMAScript 5&&ECMAScript 6版、Dell G3電腦。

        es6繼承和es5繼承的區別

        • ES5的繼承實質上是先創建子類的實例對象,然后再將父類的方法添加到this上(Parent.apply(this)).

        • ES6的繼承機制完全不同,實質上是先創建父類的實例對象this(所以必須先調用父類的super()方法),然后再用子類的構造函數修改this。

        • ES5的繼承是通過原型或構造函數機制來實現。

        • ES6通過class關鍵字定義類,里面有構造方法,類之間通過extends關鍵字實現繼承。子類必須在constructor方法中調用super方法,否則新建實例報錯。因為子類沒有自己的this對象,而是繼承了父類的this對象,然后對其進行加工。如果不調用super方法,子類得不到this對象。

        注意super關鍵字指代父類的實例,即父類的this對象。

        注意:在子類構造函數中,調用super后,才可使用this關鍵字,否則報錯。

        1、在es5中的繼承:

        	function parent(a,b){ 	    this a = a; 	    this b = b; 	} 	function child(c){ 	    this c = c 	};

        通過子集去繼承父級:

        parent.call(child,1,2)

        而去看call的底層方法可知,繼承的過程是通過prototype屬性

        child.prototype = new parent(1,2);

        由此可知,ES5繼承的實質是先創建了子類元素child的的實例對象,然后再把父類元素parent的原型對象中的屬性賦值給子類元素child的實例對象里面,從而實現繼承

        2、ES6中的繼承

        在傳統JS中,生成對象是通過創建構造函數,然后定義生成對象

        function parent(a,b){     this.a = a;     this.b = b; }

        然后通過prototype增加對應所需方法或屬性

        parent.prototype.methods = function(){     return 'this is test methods'; } parent.prototype.attr = 'this is test attr‘;

        而ES6中引入了類的概念,也就是class。通過關鍵詞class去定義對象。

        class是個關鍵詞,語言糖,這樣能更清晰的讀懂所創建的對象,

        通過屬性constructor來接收控制方法傳入的參數,如果不寫這個屬性,默認是沒有參數的

        class parent{     curstructor(a,b){         this.a = a;         this.b = b;     } }

        ES6中的繼承是基于class類之間繼承的。通過關鍵詞extends實現。

        通過super實例化調用父類

        	class parent{ 	  constructor(a,b){ 	    this.a = a; 	    this.b = b; 	  } 	  parentMethods(){ 	    return this.a + this.b 	  } 	} 	class child extends parent{ 	  constructor(a,b,c){ 	    super(a,b); 	    this.c = c; 	  } 	  childMethods(){ 	    return this.c + ',' + super.parentMethods() 	  } 	} 	const point = new child(1,2,3); 	alert(point.childMethods());

        上面的代碼,是一套簡單的ES6父子類繼承。

        相信已經看出來了,雖明顯的區別就是在于ES6中,激活父組件的是super方法,而不是新建實例化,也就是說,父類的實例對象是先創建出來的,調用后,再去修改子類的構造函數中的this完善原型對象。

        總結:

        ES5和ES6繼承最大的區別就是在于:

        • ES5先創建子類,在實例化父類并添加到子類this中

        • ES6先創建父類,在實例化子集中通過調用super方法訪問父級后,在通過修改this實現繼承

        【推薦學習:javascript視頻教程】

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 国产精品久久久久久久久| 久久国产精品99久久久久久老狼 | 国产精品视频网站你懂得| 青娱乐国产精品视频| 亚洲午夜久久久精品影院| 国内精品久久久久久99蜜桃| 久久久人妻精品无码一区| 国产精品白丝AV嫩草影院| 欧美人与性动交α欧美精品| 国产偷亚洲偷欧美偷精品| 亚洲国产精品无码一线岛国| 久久精品无码一区二区三区免费| 欧美日韩精品一区二区| 成人国产精品999视频| 青青草原精品国产亚洲av| 欧美亚洲另类精品第一页| 91热成人精品国产免费| 狠狠色丁香婷婷综合精品视频| 人妻少妇精品视中文字幕国语| 精品国产亚洲一区二区在线观看| 91精品国产91久久久久久青草| 国产成人精品男人的天堂538| 国产午夜精品一区二区三区漫画| 午夜精品射精入后重之免费观看 | 精品乱码久久久久久久| 亚洲精品无码久久久久| 鲸鱼传媒绿头鱼实验室之炮机测评日韩精品一级毛 | 久久久一本精品99久久精品88| 亚洲欧美国产∧v精品综合网| 亚洲国产精品日韩| 亚洲国产一成久久精品国产成人综合 | 精品视频在线观看你懂的一区 | 人妻少妇精品系列| 精品久久久久久无码中文野结衣 | 亚洲精品一级无码鲁丝片| 免费精品国自产拍在线播放| 欧美精品黑人粗大| 天天爽夜夜爽8888视频精品| 无码国内精品久久人妻麻豆按摩 | 精品亚洲永久免费精品| 久久精品国产只有精品2020|