zoukankan      html  css  js  c++  java
  • JS-15 (class)

    ES6中新增的创建一个类型的新关键词

    原js中一个类型,一定是两部分,而不仅仅是一个对象:
    ①构造函数:负责定义该类型将来所有子对象的统一属性解构,同时负责创建子对象;

    ②原型对象:负责替将来这个类型的所有子对象保存共有的属性和方法定义。

    构造函数和原型对象是分开定义的。

    class:包裹原来的构造函数和原型对象。

    步骤

    ①用class{}包裹原来的构造函数和原型对象;

    ②将构造函数名提升为整个class的名字,今后所有构造函数统一命名为constructor;

    ③所有原型对象方法,直接放在class中,不用加类型名.prrototype.方法名

    class Student{
        constructor(sname,sage){
            this.sname=sname;
            this.sage=sage;
        } 
        intr(){
            console.log(`I'm ${this.sname}, I'm ${this.sage}`);
        }
        intr2(){
            console.log(`我是 ${this.sname}, 今年 ${this.sage} 岁`);
        }
    } 
    var xlx=new Student('x_l_x',18);
    xlx.intr();
    xlx.intr2();

    class的继承:

    class依然可以使用Object.setPrototypeOf(子对象,父对象)

    实际继承方案

    class 子类型 extends 父类型{
      //此时子类型有了一个super()方法,子类型中调用super()等效于调用父类型中的构造函数,来执行父类型中构造函数内的代码,
      将父类型规定的属性解构,添加到未来的孙子对象中。不过需要险些super(),再写子类型自己的属性。即super()必须放在最开始的位置。
    }

    ES6实现两种类型的继承:

    // ES6实现两种类型之间的继承
    // 父类型(共有的属性和方法)
    class Enemy{
        constructor(x,y){
            this.x=x;
            this.y=y;
        }
        fly(){
            console.log(`一个敌人当前位置${this.x},${this.y}`);
        }
    }
    // 子类型1
    class Plane extends Enemy{
        constructor(x,y,score){
            super(x,y);
            this.score=score;
        }
        getScore(){
            console.log(`击落一架敌机,获得${this.score}分`);
        }
    }
    // 子类型2
    class San extends Enemy{
        constructor(x,y,award){
            super(x,y);
            this.award=award;
        }
        getAward(){
            console.log(`击落一个降落伞,获得奖励${this.award}`);
        }
    }
    var p1=new Plane(100,100,10);
    var s1=new San(200,200,'1 live');
    p1.fly();         //一个敌人当前位置100,100
    p1.getScore();    //击落一架敌机,获得10分
    s1.fly();         //一个敌人当前位置200,200
    s1.getAward();    //击落一个降落伞,获得奖励1 live
  • 相关阅读:
    .net webapi项目跨域问题及解决方案
    Ad Hoc Distributed Queries组件
    未启用当前数据库的 SQL Server Service Broker,因此查询通知不受支持。如果希望使用通知,请为此数据库启用 Service Broker。]
    flume与Mosquitto的集成
    分享一下spark streaming与flume集成的scala代码。
    java.lang.NoClassDefFoundError: org/apache/avro/ipc/Responder
    ERROR Shell: Failed to locate the winutils binary in the hadoop binary path
    cdh环境下,spark streaming与flume的集成问题总结
    关于CDH中开发Spark
    重新编译安装gcc-4.1.2(gcc版本降级)之TFS安装
  • 原文地址:https://www.cnblogs.com/codexlx/p/12488387.html
Copyright © 2011-2022 走看看