类的本质:
首先我们需要明白javascript并不存在类,它的类其实是个语法糖,本质上还是依托原型链和构造函数完成继承。类是一种特殊的函数我们可以使用typeof来进行判断,它和函数的区别有以下几点:
Car class {}
typeof Car // function
Car.prototype.constructor // class Car
const p = new Car()
p instanceof Car // true
a、如果我们使用声明式的方式创建函数函数声明会提升,但是类不会。
b、调用方式的不同函数可以直接调用或者通过new调用,但是类只能通过new的方式调用,如果不使用new调用会报错。
c、第三个不同是函数是函数作用域,而类属于块级作用域。
其次我们来类的一些特性:
一、类的声明方式及组成:
a、类的声明方式跟普通函数一样有两种声明方式即声明式和表达式:
class Car {} //类声明式
const Car = class {} //类表达式
b、类的组成包括:类构造函数、静态方法、给实例原型上添加属性或方法、添加实例属性和方法。类的构成包括以上几种,但事实上,这些都不是必须的,如果我们定义一个空 的类,那么完全是可以的,即便没什么意义。
三、类的构造函数:
constructor是类内部构造函数的关键字,constructor会告诉解释器使用new操作符是应当执行这个函数。当我们用new调用类时和new调用函数时是一样的都做了以下几件事:
a、在内存中创建一个对象。
b、新对象内部的原型指向构造函数或者类的prototype属性。
c、构造函数内部的this指向当前创建的对象,执行构造函数的代码可以赋值。
四、实例、原型、访问器、类成员
实例:我们通过调用this可以给实例添加属性,属性可以是任何数据类型。每个实例都独自拥有所有的实例属性。
原型:如果我们需要给一个构造函数添加原型方法需要调用prototype添加,在class中不用,直接声明式的创建函数就会添加到类中。代码如下:
class Car {
name = "张十三"
sayName(){
console.log(this.name)
}
}
结果:
访问器:类也支持访问器格式同对象访问器一样,代码如下:
class Car {
sayName() {
console.log(this._name);
}
set name(name) {
this.name_ = name
}
get name() {
return this.name_
}
}
const person1 = new Car()
person1.name = 'person1'
console.log(person1.name); // person1
一、JavaScript中的类是什么?
js中的类是用来创建对象的,我们可以认为它是一种特殊的函数与一般函数不同的是class不可以提升声明,class内部定义了对象的属性和方法。
二、javascript中的类与其他语言的类有什么不同?
js中的类其实是个语法糖,js中类是基于原型的,它的本质上还是函数,从原型对象中继承方法和属性。
三、如何在JavaScript中定义一个类:
class Car {
constructor(make, model, year){
this.make = make
this.model = model
this.year = year
}
getAge(){
return 2018
}
}
constructor是类构造函数,通过它类就可以创建实例
四、如何创建class的实例
使用new 关键字:
const myCar = new Car('Honda', 'Accord', 2018);
五、super
super用于调用父类的构造函数和方法
六、静态方法