ES6中的class
class
class是一个语法糖,其底层还是通过 构造函数
去创建的。
class
和function
都可以作为构造函数,通过new
操作符来实例化。
constructor 方法
constructor方法是类的默认方法,通过new命令生成对象实例时,自动调用该方法。一个类必须有constructor方法,如果没有显式定义,一个空的constructor方法会被默认添加。
class Person {
constructor(name) {
this.name = name;
}
}
const usr = new Person('Jack');
console.log(usr); // Person { name: 'Jack' }
定义类的时候,前面不需要加 function, 而且方法之间不需要逗号分隔,加了会报错。
类的所有方法都定义在类的prototype属性上面。
class A {
constructor() {}
toString() {}
toValue() {}
}
// 等同于
function A () {
// constructor
};
A.prototype.toString = function() {};
A.prototype.toValue = function() {};
在类的实例上面调用方法,其实就是调用原型上的方法。
let a = new A();
a.constructor === A.prototype.constructor // true
类的实例
实例的属性除非显式定义在其本身(即定义在this对象上),否则都是定义在原型上(即定义在class上)。
注意:
- class不存在变量提升
new A(); // ReferenceError
class A {}
因为 ES6 不会把类的声明提升到代码头部。这种规定的原因与继承有关,必须保证子类在父类之后定义。
{
let A = class {};
class B extends A {}
}
静态方法
类相当于实例的原型,所有在类中定义的方法,都会被实例继承。 如果在一个方法前,加上 static 关键字,就表示该方法不会被实例继承,而是直接通过类来调用,这就称为"静态方法"。
class A {
static classMethod() {
return 'hello';
}
}
A.classMethod();
console.log(A.classMethod());
// 'hello'
const a = new A();
a.classMethod();
// TypeError: a.classMethod is not a function
静态属性
静态属性指的是 Class 本身的属性,即Class.propName,而不是定义在实例对象(this)上的属性。
class MyClass {
static myStaticProp = 42;
constructor() {
console.log(MyClass.myStaticProp); // 42
}
}
继承
Class 可以通过extends关键字实现继承
class Animal {}
class Cat extends Animal { };
阅读剩余
版权声明:
作者:chun
链接:https://chun53.top/851.html
文章版权归作者所有,未经允许请勿转载。
THE END