instanceof
运算符用于检测构造函数的 prototype
属性是否出现在某个实例对象的原型链上。
1、类的声明
1.1 基本的类声明语法
要声明一个类,首先编写class关键字,紧跟着的是类的名字。
class Person {
constructor(name) {
this.name = name;
}
sayName() {
console.log(this.name);
}
}
类的使用
let person = new Person("yff");
person.sayName();//output yff
console.log(person instanceof Person);
console.log(person instanceof Object);
console.log(typeof Person);//"function"
console.log(typeof Person.prototype.sayName);//"function"
执行结果:
类中使用简洁语法来定义方法,因而不需要添加function关键字。
除constructor外没有其他保留的方法名,所以可以尽情添加方法。
自有属性是实例中的属性,不会出现在原型上,且只能在类的构造或方法中创建,此例中的name就是一个自有属性(成员变量)。
1.2 为何使用类语法
类和函数的区别,类的特点:
- 函数声明可以被提升,而类声明不能被提升。真正执行声明语句之前,它们会一直存在于临时死区中。
- 类声明中的所有代码将自动运行在严格模式,而且无法强行让代码脱离严格模式执行。
- 在自定义类型中,需要通过Object.defineProperty()方法手工指定某个方法为不可枚举;而在类中,所有方法都是不可枚举的。
- 每个类都有一个名为[[Construct]]的内部方法,通过关键字new调用那些不含[[Construct]]的方法会导致程序抛出错误。
- 使用除关键字new以外的方式调用类的构造函数会导致程序抛出错误。
- 在类中修改类名会导致程序报错
2、类表达式
类和函数都有两种存在形式:声明形式和表达式形式。
- 声明形式的函数和类都由相应的关键字(function和class)进行定义,随后跟一个标识符。
- 表达式形式不需要在