美文网首页
【学习笔记】ES6 标准 - 类(class)和继承

【学习笔记】ES6 标准 - 类(class)和继承

作者: Spidd | 来源:发表于2019-06-20 14:32 被阅读0次
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>类(class)和继承</title>
        <script type="module">
    
            /*----------类(class)和继承-----------*/
            /*面向对象理解
             * ---人--- Person
             * 属性:name,
             * 方法:getName,
             * */
    
            // ES6之前-----------
            {
                function Person(name, age){
                    this.name = name;
                    this.age = age
                    this.getName = function () {
                        return this.name
                    }
                }
                // Person.prototype.showName = function(){
                //   return `名字为:${this.name}`
                // };
                // Person.prototype.showAge = function(){
                //     return `名字为:${this.age}`
                // };
    
                //【Object.assign】合并对象
                Object.assign(Person.prototype,{
                   showName(){
                       return `名字为:${this.name}`
                   },
                    showAge(){
                        return `名字为:${this.age}`
                    }
                });
    
                let person = new Person('奶牛', 2);
                console.log(person.showName())
                console.log(person.showAge())
            }
    
            // ES6类变形
            /*
            * 【重点】属性名可以放表达式(或者变量),只要它能执行
            * 【注意】class 没有提升
            * */
            {
                // const Person = class{}
                let name = 'showName';
                class Person
                {
                    constructor(name, age){ //构造方法(函数) 当前类被new时 自动执行
                        console.log(`构造函数执行了。 ${name}, ${age}`)
                        this.name = name;
                        this.age = age;
                    }
                    [name](){
                        return `名字为${this.name}`
                    }
                }
                let p1 = new Person('奶牛', 18);
                console.log(p1)
                console.log(p1[name]())
            }
    
            // 矫正this
            /*
            * fn.call(this指向谁, args1,args2.....)
            * fn.apply(this指向谁, [args1,args2....])
            * fn.bind() //es5新增
            * */
            {
                class Person
                {
                    constructor(){ //构造方法(函数) 当前类被new时 自动执行
                        this.name = '奶牛';
                        this.showName = this.showName.bind(this); // 矫正this.
                    }
                    showName(){
                        return `名字为${this.name}`
                    }
                }
                let p1 = new Person();
                let { showName } = p1;
                console.log(showName());
            }
    
            // set 监听 设置的值  get 监听 取值
            {
                class Person
                {
                    constructor(){ //构造方法(函数) 当前类被new时 自动执行
                    }
                    get getA(){
                        console.log('456')
                        return this.a
                    }
                    set setA(val){
                        console.log(this)
                        this.a = val
                    }
                }
                let p1 = new Person();
                p1.setA = 123;
                console.log(p1.getA)
            }
    
            // 静态方法 static (类身上方法,原型上的方法,会继承到子类上。)
            /*
            * */
            {
                class Person
                {
                    constructor(){ //构造方法(函数) 当前类被new时 自动执行
                    }
                    showName(){
                        return `这是showName方法`;
                    }
                    static aaa(){
                        return `这是静态方法aaa;`
                    }
                }
                let p1 = new Person();
                console.log(Person.aaa());  //父类调用
    
                // ES6之前的继承
                {
                    function Person(name) {
                        this.name = name;
                    }
                    Person.prototype.showName = function () {
                       return `名字为:${this.name}`;
                    }
                    function Student(name, skill) {
                        Person.call(this,name); // 继承 属性
                        this.skill = skill;
                    }
                    Student.prototype = new Person(); //继承 静态方法
                    let stu1 = new Student('奶牛','逃学');
                    console.log(stu1.showName())
                }
    
                // ES6之后的继承 class Student extends Person
                {
                    class Person
                    {
                        constructor(name){ //构造方法(函数) 当前类被new时 自动执行
                            this.name = name
                        }
                        showName(){
                            return `这是showName方法`;
                        }
                        static aaa(){
                            return `这是静态方法aaa;`
                        }
                    }
                    class Student extends Person{    //继承
                        constructor(name,sikll){
                            super(name);   //传递父级需要的参数
                            this.skill = sikll;
                        }
                        showSikll(){
                            return `这是showSikll方法`
                        }
                        showName(){
                            console.log(super.showName())  // 父级的方法调用
                            return `子类里面的showName`;
                        }
                    }
                    let stu1 = new Student('Strive', '逃学');
                    console.log(stu1.showName());
                }
            }
        </script>
    </head>
    <body>
    <h1></h1>
    </body>
    </html>
    

    相关文章

      网友评论

          本文标题:【学习笔记】ES6 标准 - 类(class)和继承

          本文链接:https://www.haomeiwen.com/subject/rifzfctx.html