es6class揭秘

es6中,新增了class关键字用于定义一个类,然则本质上并没有给javascript增添新的oop机制,由于javascript原型继续以及组织函数式声明使人觉得艰涩难明,增加class的目标就是为了掩饰它底层的机制,使得我们不必直接打仗这些观点,相当于一个语法糖。

class语法

chrome中运转以下代码

  class Super{
        constructor(){
            this.name = "Super";
        }
        superSayHello(){
            console.log("super hello")
        }
    }
    class Sub extends Super{
        constructor(){
            super();
            this.realName = "Sub";
        }
        subSayHello(){
            console.log("sub hello")
        }
    }

    var sub = new Sub();

调试视察sub的值。

《es6class揭秘》

我们发明统统的要领都是定义在对象的prototype属性上,不难得出这几者的关联如下图所示
《es6class揭秘》

es5语法

es6中的class与我们之前写的原型继续基础一致,一样的关联用es5来写的话

    function Super(){
        this.name= "Super";
    }
    Super.prototype.superSayHello = function(){
            console.log("super hello")
    };

    function Sub(){
        //借用父类组织函数 等价于es6中的super()
        Super.call(this);
        this.realName= "Sub";
    }
    //以上只完成了数据的复制
    //运用Object.create() 而不是new Sub(); 防止挪用两次Sub();
    Sub.prototype = Object.create(Super.prototype);
    Sub.prototype.constructor = Sub;
    
    var sub = new Sub();

扩大

由于javascript本质上是没有类这个观点,统统皆对象,为了模仿别的面向对象言语的特征(如JAVA),涌现了许多种间接完成继续的要领。以上es5的继续实在就是我们说的寄生式组合继续,也是javascript中最经常使用的继续形式。

    原文作者:realwate
    原文地址: https://segmentfault.com/a/1190000009716691
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞