首页 > 其他 > 详细

ES6中的类

时间:2019-11-03 17:57:33      阅读:88      评论:0      收藏:0      [点我收藏+]

ES6中的类

  1. class

    class Fo {
        constructor(a,b) {
            this.x = a;
            this.y = b;
        }
    
        gimmeXY() {
            return this.x * this.y;
        }
    }

    等价于如下代码

    function Fo(a, b) {
        this.x = a;
        this.y = b;
    }
    
    Fo.prototype.gimmeXY = () => this.x * this.y;

    以上两种方式的区别

    1. function Fo有变量提升,class Fo并不会提升(所以实例化一个class之前要先声明)
    2. class Fo并不会创建一个window属性

2.extends和super

class Bar extends Fo {
    constructor(a, b, c) {
        super(a, b, c);
        this.z = c;
    }
    
    gimmeXYZ() {
        return super.gimmeXY() * this.z;
    }
}
class ParentA {
    constructor() {
        this.id = "a";
    }
    foo() {
        console.log("ParentA:", this.id);
    }
}

class ChildA extends ParentA {
    foo() {
        super.foo();
        console.log("ChildA:", this.id);
    }
}

var a = new ChildA();
a.foo(); // Parent: a
         // ChildA: a

class ParentB {
    constructor() {
        this.id = "b";
    }
    foo() {
        console.log("ParentB:", this.id);
    }
}

class ChildB extends ParentB {
    foo() {
        super.foo();
        console.log("ChildB:", this.id);
    }
}

var b = new ChildB();
b.foo();    // ParentB: b
            // ChildB: b

b.foo.call(a);  // ParentB: a
                // ChildB: a
// this.id被动态绑定,super.foo()并没有被动态绑定

3.子类构造器

  • 类和子类的构造器并不是必须的;省略的话会自动提供一个默认构造器

  • 默认构造器可以认为是这样的

    constructor(...args) {
        super(...args);
    }

    1) 子类构造器中调用super(...)之后才能访问this(机制,可以理解为对实例中this进行创建/实例化的是父构造器

    class Foo {
        constructor() { this.a = 1; }
    }
    class Bar extends Foo {
        constrcutor() {
            this.b = 2;   //不允许在super()之前使用this
            super();  // Uncaught SyntaxError: 'super' keyword unexpected here
        }
    }

ES6中的类

原文:https://www.cnblogs.com/wydumn/p/11788040.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!