ES6基础-7

Class类

//类的使用
    var Example = class {//匿名类
        constructor(age){
            this.age = age;
        }
    }
    var Example2 = class {//命名类
        constructor(age){
            this.age = age;
        }
    }
    //类不可以重复声明 注意:类没有提升之说、必须在使用之前定义 类方法之间不能出现分号
    //ES6 当中还是可以使用prototype添加方法属性的,如下 覆盖或者初始化的时候添加
    Example.prototype.func = function(){
            console.log("I can do it!");
        }
    
    Object.assign(Example.prototype,{
        Run(){
            console.log("hello world!");
        }
    });
    var test = new Example();
    test.Run();
    test.func();

 静态属性

    //静态属性 在类内部只有静态方法
    var Example3 = class {//匿名类
        static name = "webcyh";//注意这里是分号//这个是类的静态属性 通过类名.属性名访问 或者给所
        constructor(age){
            this.age = age;
        }
    }
    var Example4 = class {//匿名类
        static name:"webcyh";//注意这里是分号//这个是类的静态属性 通过类名.属性名访问 或者给所
        constructor(age){
            this.age = age;
        }
    }
    //给所有的class添加静态属性
    class.prototype.he = "hehe";
    console.log(Example3.he);//这个访问的是所有class都具有的静态属性
    console.log(Example3.name);//当前这的类具有的属性

访问Exampl的name会返回声明类名的class后边的类名

实例方法以及类的实例创建

var Example4 = class {//匿名类
        constructor(age){
            this.age = age;
            this.say = str=>console.log(`I fuck you ${str}`)//实例方法
        };
        static func(){
            console.log("hh");
        }
    }
    //给所有的class添加静态属性
    console.log(Example3.name);//当前这的类具有的属性
    Example4.func();
    //class的实例必须使用new
    var n4 = new Example4();
    n4.say("time");//执行实例方法

 注意这里的与ES5的不同 该实例的原型prototype就是创建该对象的类 而不是该类的prototype 该对象.__proto__.num = function(){}相当于在该类添加方法

var n4 = new Example4();
    n4.say("time");//执行实例方法
    console.log(n4.__proto__);
    n4.__proto__.getNum = ()=>console.log("sdsdf");
    n4.getNum();
    var n3 = new Example4();
    n3.getNum();

 decorator是一个函数,用于修改类的行为

//decorator是一个函数用于修改类的行为
    function test(is){
        return function(target){
            target.isTrue = is;
        }
    }
    @test(true)
    class Example = {
        constructor(){
            console.log("test");
        }
    }
    console.log(Example.isTrue);
原文地址:https://www.cnblogs.com/webcyh/p/11461284.html