Es6(class)

一、基础用法

//1传统面向对象 构造函数
    function Person(name,age){
        this.name = name;
        this.age = age;
    }
    Person.prototype.sayName = function(){
        console.log(this.name); //王大厨
    }
    var person = new Person('王大厨','26');
    person.sayName();

2.

//2.es6 中定义的类
    class Person{
        constructor(name,age){
            this.name = name;
            this.age = age;
        }

        sayName(){
            console.log(this.name) //王二厨
        }
    }
    var person = new Person('王二厨',22);
    person.sayName();
   //在ES6的“类”上面继续存在。事实上,类的所有方法都定义在类的prototype属性上面。

3.枚举

类的内部所有定义的方法,都是不可枚举的(non-enumerable)。跟es5中的差距。

4.constructor 方法

constructor方法是类的默认方法,通过new命令生成对象实例时,自动调用该方法。一个类必须有constructor方法,如果没有显式定义,一个空的constructor方法会被默认添加。

默认返回this,及实列对象。返回可以指定返回另外的对象。

类的构造函数,不使用new是没法调用的,会报错。这是它跟普通构造函数的一个主要区别,后者不用new也可以执行。

5.类的实列对象

生成类的实例对象的写法,与ES5完全一样,也是使用new命令。如果忘记加上new,像函数那样调用Class,将会报错。

var person = new Person('王二厨',22); //正确
    var p1 = Person(); //报错

与ES5一样,实例的属性除非显式定义在其本身(即定义在this对象上),否则都是定义在原型上(即定义在Class上)。

6.不存在变量的提升

//Class不存在变量提升(hoist),这一点与ES5完全不同。
    new Person(); //报错
    class Person{}

7.立即执行的Class 类

let p = new class{
        constructor(name){
            this.name = name;
        }
        sayName(){
            console.log(this.name);
        }
    }('王三厨');

二、继承

Class之间可以通过extends关键字实现继承,这比ES5的通过修改原型链实现继承,要清晰和方便很多。(跟php中一样啊

相关推荐