轻松学习 JavaScript——第 8 部分:JavaScript 中的类

ECMAScript
6引入了class关键字以成立JavaScript中的类。现在,你可以使用class属性在JavaScript中创立类。在ECMA
6此前,无论什么日期使用new运算符调用一个函数,该函数都会回去一个新对象。因而,此函数是当做一个类来拔取的,并被誉为构造函数。这种调用函数来回到对象的不二法门也被喻为构造函数调用形式。

但在ECMAScript 6中,可以动用class关键字成立类。请看上面的代码:

class Car {
    constructor(maker, price) {
        this.maker = maker;
        this.price = price;
    }
    getInfo() {
        console.log(this.maker + " costs : " + this.price);
    }
}

在地点的代码片段中,你已经采用ECMAScript 6
class紧要字创造了一个名为Car的类。你也可以创设一个Car类的对象,如下所示:

var car1 = new Car("BMW", 100);
car1.getInfo();
var car2 = new Car("Audi", 150);
car2.getInfo();

JavaScript类是一般基于原型的持续的简化语法。它不提供任何新的对象创设或原型继承方式,并且不会在JavaScript中引入任何面向对象或继续的新模型。你也可以说类是创设对象的例外函数。

类注解和发挥

鉴于JavaScript中的class属性也是一个函数,所以也可以动用类申明和类表明式来创立。你可以选拔类申明创立一个类,如下所示:

class Car {
    constructor(maker, price) {
        this.maker = maker;
        this.price = price;
    }
    getInfo() {
        console.log(this.maker + " costs : " + this.price);
    }
}

类也可以行使类表明式来创建。你能够创造命名或未命名的类表达式。可以那样创造命名的类表明式,如下所示:

var Car = class {
    constructor(maker, price) {
        this.maker = maker;
        this.price = price;
    }
    getInfo() {
        console.log(this.maker + " costs : " + this.price);
    }
    toString() {
        return `${this.maker} costs : ${this.price}`;
    }
}

未命名的类表达式可以如下所示地被成立。给类表达式的名号是类重点的当地名称。

var Car = class c {
    constructor(maker, price) {
        this.maker = maker;
        this.price = price;
    }
    getInfo() {
        console.log(this.maker + " costs : " + this.price);
    }
    toString() {
        return `${this.maker} costs : ${this.price}`;
    }
}

类的升官

如前所述,一个类既可以作为声明又可以看成表明式来创设,不过与函数声明不相同,类申明不会被升级到实践上下文的顶部。请看上边的代码:

var car1 = new Car("BMW", 10); // Reference Error  console.log(car1.toString());
class Car {
    constructor(maker, price) {
        this.maker = maker;
        this.price = price;
    }
    getInfo() {
        console.log(this.maker + " costs : " + this.price);
    }
    toString() {
        return `${this.maker} costs : ${this.price}`;
    }
}

地点的代码会抛出引用错误(Reference
Error),因为你在宣称它以前试图访问一个类。因而,大家得以获取函数申明被升高,而类表明不被升级的结论。

类方法

JavaScript类中有三体系型的艺术:

  • 构造方法。
  • 静态方法。
  • 原型方法。

类构造函数主意创制起先化对象。一个类只好有一个构造方法。假诺你品味创设四个构造函数方法,则JavaScript将抓住那多少个。能够动用主要字constructor
创制构造函数,如上面的代码所示:

class Car {
    constructor(maker, price) {
        this.maker = maker;
        this.price = price;
    }
}

JavaScript类的静态方法是用类调用的,而不是用类的特定目的调用的。倘使您品味用类的实例调用它们,则JavaScript将抛出尤其。使用紧要字static可以创建静态方法,如下所示:

class Car {
    static count() {
        console.log("I am static method");
    }
}
Car.count();
Car.count();

假设你试图用实例调用静态方法,那么JavaScript会抛出格外表明那么些函数不存在。别的,请记住,JavaScript类没有静态属性或成员。停止如今,它只帮衬静态方法。

其他利用类实例访问的正常方法都被誉为原型方法。那么些主意可以持续和运用类的靶子。

class Car {
    constructor(maker, price) {
        this.maker = maker;
        this.price = price;
    }
    getInfo() {
        console.log(this.maker + " costs : " + this.price);
    }
}
var car1 = new Car("BMW", 10);
car1.getInfo();

在上面的代码片段中,getInfo()是Car类的原型方法。正如你所看到的,大家正在使用Car类的实例。由于它是原型方法,所以也得以继承。让大家来商量为何这个艺术被称之为原型方法。首先,考虑下边的代码:

class Car {
    constructor(maker, price) {
        this.maker = maker;
        this.price = price;
    }
    getInfo() {
        console.log(this.maker + " costs : " + this.price);
    }
}
console.log(typeof (Car)); // function

在那些代码片段中,大家输入了一个Car类的项目,也得到了一个函数的输出。正如你所见到的,这么些类只是一个函数类型,所以和其他函数一样,它也有一个prototype属性。那么些健康的不二法门是类的原型对象的情势,由此它们被称作原型方法。它们得以因此百折不挠依据原型的继承而被一连。

而外那两种档次的章程之外,JavaScript也有一部分叫getter和setter的事物,你能够点此处了解。

结论

在那篇小说中,大家差不多介绍了ECMAScript
2015中引入的JavaScript类属性。使用class关键字,大家可以创制一个类,但是请牢记,那不是引入对象制造或再三再四的新章程。相反,对于同一的对象和根据原型的继承,那只是一个更简便易行的语法。

欢迎参与学习互换群569772982,大家一齐学习沟通。