• 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>
  • 相关阅读:
    leetcode 279. Perfect Squares
    leetcode 546. Remove Boxes
    leetcode 312. Burst Balloons
    leetcode 160. Intersection of Two Linked Lists
    leetcode 55. Jump Game
    剑指offer 滑动窗口的最大值
    剑指offer 剪绳子
    剑指offer 字符流中第一个不重复的字符
    leetcode 673. Number of Longest Increasing Subsequence
    leetcode 75. Sort Colors (荷兰三色旗问题)
  • 原文地址:https://www.cnblogs.com/yong-2000/p/12061668.html
Copyright © 2020-2023  润新知