zoukankan      html  css  js  c++  java
  • ES6中的Class的基本语法

    简介

    javascript语言里,生成实例化对象的方法是通过构造函数来生成的,

    举栗:

    function Point(x, y) {
      this.x = x;
      this.y = y;
    }
    
    Point.prototype.toString = function () {
      return '(' + this.x + ', ' + this.y + ')';
    };
    
    var p = new Point(1, 2);//这里是new一个实例化对象,把参数1和参数2传到函数里。

    Es6中的calss写法只是让对象原型的写法更加清晰、更像面向对象的编程语法,上面的代码用class写就是下面这样子。

    class Point {//声明一个类名叫Point,在class前面不需要function
      constructor(x, y) {//constructor这是一个构造方法
        this.x = x;//这里的this关键字代表实例对象
        this.y = y;
      }//两个方法之间不能用逗号分隔,要不会报错
    
    
      toString() {
        return '(' + this.x + ', ' + this.y + ')';
      }
    }

    类的实例

    把类实例化也很简单,代码如下

    class Point {
      // ...
    }
    
    var point = Point(2, 3);
    //这种实例化方法是错误的,如果这样写的话,会直接报错因为这样写等与像函数那样之间调用了
    
    var point = new Point(2, 3);
    //这一步才是正确的把Point这个对象实例化 对象实例话是需要new这个关键字的

    类的继承

    Class是可以通过extends来实现继承的,代码如下

    class Point {
    }
    
    class ColorPoint extends Point {//这一步是ColorPoint继承Point的。
    }
    super关键字

    这个关键字可以当函数使用也能当作对象使用,这两种情况下,用法完全不同。

    作为函数调用时代码如下

    class A {}
    
    class B extends A {
      constructor() {
        super();//这里的super()是ES6中的要求,子类的构造函数必须执行一次super函数,要不代码会报错。
      }
    }

    作为对象被调用的时候,代码如下

    class A {
      p() {
        return 2;
      }
    }
    
    class B extends A {
      constructor() {
        super();//这里的super()在普通方法里指向的是父类的原型对象;在静态方法里是指向父类。
        console.log(super.p()); // 2
      }
    }
    
    let b = new B();

    静态方法

    所有在类中定义的方法,都会被实例继承,如果不想被实例继承的话,就在一个方法前面加上static关键字,然后该方法就不会被实例继承,而是之间通过类调用,这就是静态方法,示例代码如下

    class Foo {//这里的Foo是一个类名
      static classMethod() {//这是通过static来把classMethod变为静态方法的
        return 'hello';
      }
    }
    
    Foo.classMethod() // 'hello'
    
    var foo = new Foo();//这一步是实例化对象
    foo.classMethod()//这一步是通过类来直接调用classMethod这个方法的。

    以上是我对ES6中class的总结,下面代码是一个猜数字的小游戏

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <style>
            #box2{
                 300px;
                height: 300px;
                color:red;
                background:red;
            }
            #box{
                 100%;
                height: 100%;
                background:rgba(0, 0, blue, alpha);
            }
        </style>
        
    </head>
    <body>
    /*这里是静态页面布局*/
        <input type="button" value="开始" onclick="start()">
        <br />
        <input type="number" id="txt">
        <input type="button" value="guess" onclick="gues()">
        <br />
        结果:<p id="p"></p>
    <script>
        var v=0//答案变量
    class A{
        constructor(num) {
            this.num = num;
            this.v = v//通过这一步生成答案
        }
    //计算大小
        guess() {
            var str = ''
            if(this.num > this.v){//猜大了
               str='猜大了' 
                
             }else if (this.num < this.v){//猜小了
                str='猜小了' 
                
             }else{/猜对了
                str='猜对了'
    
            }
            p.innerHTML=str
        }
    }
    //猜一下事件
    function gues() {
        var num = txt.value;
        let B = new A(num)
        B.guess()
    }
    //游戏开始事件
    function start(){
        v = parseInt(Math.random() * 100);
        console.log(v)
    }
    </script>
    </body>
    </html>
  • 相关阅读:
    animation动画应用--android游戏开发
    Codeforces Round #203 (Div. 2)
    Codeforces Round #206 (Div. 2)
    Codeforces Round #204 (Div. 2): C
    Codeforces Round #204 (Div. 2): B
    Codeforces Round #204 (Div. 2): A
    Codeforces Round #205 (Div. 2) : D
    Codeforces Round #205 (Div. 2) : C
    Codeforces Round #205 (Div. 2) : B
    Codeforces Round #205 (Div. 2) : A
  • 原文地址:https://www.cnblogs.com/yong-2000/p/12061668.html
Copyright © 2011-2022 走看看