Class 类

Class 类

介绍:

在我们Js编程语言ES6之前,我们是没有Class类的概念的,但是其他很多的编程语言 eg:Java c c+,很早之前就实现了这种概念。我们在之前一直是使用构造函数和原型prototype来模拟面向对象编程的过程。

什么是Class类?

    在ES6中,class (类)作为对象的模板被引入,可以通过 class 关键字定义类。它可以被看作一个语法糖,让对象原型的写法更加清晰、更像面向对象编程的语法。
    类实际上是个“特殊的函数”,就像你能够定义的函数表达式和函数声明一  样,类语法有两个组成部分:类表达式和类声明。

注意:

Class类内部的模块,默认为严格模式,所以无需use strict 来执行严格模式。

Class类的语法:

1.定义一个类的一种方法是使用一个类声明,即用带有class关键字的类名,函数名和实例化构造名相同且大写(非强制)。

   class Person {
      constructor(x, y) {
        this.x = x
        this.y = y
      }
      toString(){
        // ...
      }
      toValue(){
        // ...
      }
   }
   //constructor 就是我们类中的构造函数,对应Es5中的构造函数
   //this关键字指向实例对象;
   //定义class类方法时,无需加function关键字;
   //定义function方法时,无需加‘,’,否则会报错;
   

2.函数声明和类声明之间的一个重要区别是函数声明会提升,类声明不会。需要先进行声明,再去访问,否则会报错。

    var person=new Person()
    class Person {
        constructor(x, y) {
          this.x = x
          this.y = y
        }
    }
    // Person is not defined

3.构造函数的prototype属性,在ES6的“类”上面继续存在。事实上,类的所有方法都定义在类的prototype属性上面。

  class Person {
        constructor(){
          // ...
        }

        toString(){
          // ...
        }

        toValue(){
          // ...
        }
  }
  
  //等同于
  Person.prototype={
      toString(){
          // ...
        },
        toValue(){
          // ...
        }
  }

4.Object.assign方法可以很方便地一次向类添加多个方法。

  class Point {
      constructor(){
        // ...
      }
  }

  Object.assign(Point.prototype, {
    toString(){},
    toValue(){}
  });
  //等同于
  class Point {
      constructor(){
        // ...
      }
      toString(){}
      toValue(){}
  }

5.类的内部所有定义的方法,都是不可枚举的(non-enumerable)。这一点与ES5的行为不一致。
6.类的属性名,可以采用表达式

  let methodName = "getArea";
  class Square{
      constructor(length) {
        // ...
      }

      [methodName]() {
        // ...
      }
  }
  //上面代码中,Square类的方法名getArea,是从表达式得到的。

7.constructor方法是类的默认方法,通过new命令生成对象实例时,自动调用该方法。一个类必须有constructor方法,如果没有显式定义,一个空的constructor方法会被默认添加。constructor方法默认返回实例对象(即this),完全可以指定返回另外一个对象。

    class Point {
        //此时这里并没有constructor构造函数 
        toString(){}
    }
    //会被默认添加成以下
    class Point {
        constructor(){

        }
        toString(){}
    }

8.类的构造函数,不使用new是没法调用的,会报错。

    class Point {
        constructor(){

        }
        toString(){}
    }
    Point.constructor() //报错

    //正确的是:
    var a=new Point()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值