ES6(六)--class的基本使用

js的传统方法是通过构造函数,定义并生成新对象,是一种基于原型的面向对象系统,在ES6中新增了类的概念,可以使用class关键字声明一个类,之后以这个类来实例化对象。

生成实例对象的传统方法

const Obj = function (a, b) {
    this.a = a;
    this.b = b;

    return this;
}

Obj.prototype = {
    constructor: Obj,
    print: function () {
        console.log(this.a + " " + this.b);
    }
}

new Obj(1, 2).print();//1 2

生成实例对象的class

class Obj {
    constructor(a, b) {
        this.a = a;
        this.b = b;
    }

    print() {
        console.log(this.a + " " + this.b);
    }
}

new Obj(1, 2).print();//1 2

上面定义了一个Obj 类,其中constructor方法就是构造方法,this代表实例对象。也就是说ES5中的Obj构造函数相当于ES6中Obj类的构造方法。

除了构造方法,Obj类还定义了一个print方法,注意方法之间不用加逗号,,不是一个JSON

上面的两个例子是一样的,ES6中的class只是一种语法糖,Obj类上的方法仍然是定义在prototype上面,所以在类上调用类的方法其实就是调用原型上面的方法,如下

class A {
    constructor() {

    }

    print() {

    }
};

let b = new A();

console.log(b.print() == A.prototype.print());//true
b.constructor === A.prototype.constructor; // true

其实constructor构造方法并不是必须的,当不需要传入参数的时候可以省略,如果省略构造方法,在运行代码的时候js引擎会自动添加一个构造方法

class a {
    constructor() {}
}
//等价于
class a {}

注意一点,类内部定义的方法都是不可以枚举的

class A {
    constructor() {

    }

    print() {

    }
};

console.log(Object.keys(A.prototype));//[]


标签: es6

添加新评论