自在上 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,大家共读书交流。