es6-类

2022-05-20  本文已影响0人  娇娇_5038

es6有一种与其他语言中类似的特性:类声明。同时,他也是es6中最简单的形式。

基本的类声明语法

要声明一个类,首先编写class关键字,紧跟着的是类的名字,其他部分的语法类似于对象字面量的简写形式,但不需要在类的各元素之间使用逗号分隔。请看这段简单的类声明代码。

   class PersonClass{

        constructor(name){

            this.name=name;

        }

        sayName(){

            console.log(this.name)

        }

    }

    let person=new PersonClass('jiaojiao');

    person.sayName();

    console.log(person instanceof PersonClass);//true

    console.log(person instanceof Object);//true

    console.log(typeof PersonClass);//function

    console.log(typeof PersonClass.prototype.sayName);//function

注:与函数不同的是,类属性不可被赋予新值,在之前的实例中,PersonClass.prototype就是这样一个只读的类属性。

为何使用类语法

尽管类与自定义类型之间有诸多相似之处,我们仍需牢记它们的这些差异。

● 函数声明可以被提升,而类声明与let类似,不能被提升。真正执行声明语句前,它们会存在于临时死区中。

● 类声明中的所有代码将自动运行在严格模式下,而且无法强行让代码脱离严格模式执行。

● 在自定义类型中,需要通过Object.defineProperty()方法手工指定某个方法不可枚举

● 每个类都有一个名为(Construct)的内部方法,通过关键字new调用那些(Construct)的方法会导致程序抛出错误

● 使用除关键字new 以外的方式调用类的构造函数会导致程序抛出错误。

● 在类中修改类名会导致程序错误

 const PersonType2=(function(){

      'use strict';

      const PersonType2=function(name){

          this.name=name;

      }

      Object.defineProperty(PersonType2.prototype,'sayName',{

          value:function(){

              console.log(this.name);

          },

          enumerable:false,

          writable:true,

          configurable:true

      })

      return PersonType2;

   }());

  class Foo {

            constructor() {

                Foo = 'bar'

            }

        }

        Foo = 'bar'

命名类表达式

在上一节的示例中,我们定义的类的表达式是匿名的,其实类和函数一样,都可以定义为命名表达式。声明时

上一篇下一篇

猜你喜欢

热点阅读