js里的类 class
以前不知道为啥,总觉得这个类很高深莫测,然后自己在开发业务中也没有需要使用它的地方。所以就一直没去了解,今天有时间看了一下文档,在这稍微记录一下自己的总结。
类的关键字:【class】【constructor】【extends】【super】【get】【set】【static】
类是用来创建对象的模板。类的名称需要首字母大写,constructor是构造函数,可以在里面定义属性。
class 类名{ constructor(参数){} method1(){} method2(){} }
1. class类
class Person{ constructor(name,age){ this.name = name; this.age = age; } getInfo(){
return "姓名:" +this.name+";年龄:"+this.age;
} }
let p = new Person("张三",38);
console.log(p.name);// 张三
console.log(p.age);// 38
console.log(p.getInfo());// 姓名:张三;年龄:38
每个类可以通过.name获取类名;如上面示例,Person.name // Person
2. extends 类继承
类可以继承的,通过extends,以及super()调用父类的构造函数,就可以继承类的属性和方法。
class Child extends Parent{ constructor(参数){ super(父类需要的参数) } }
class Son extends Person{ constructor(name,age,hobby){ super(name,age); this.hobby = hobby; } }
let s = new Son("小张",8,"看书");
console.log(s.hobby);// 看书
console.log(s.name);// 小张
console.log(s.age);// 8
console.log(s.getInfo());// 姓名:小张;年龄:8
3. get和set
类中我们可以使用 getter 和 setter 来获取和设置值。
class Person { constructor(name){ this.name = name } get _name(){ return this.name } set _name(newName){ this.name = newName } }
let p = new Person("张三");
console.log(p._name);// 张三
p._name = "李四";
console.log(p._name);// 李四
4. static
使用static关键字修饰的方法,叫做静态方法,也叫做类方法,对的没错,这个方法只属于类,而不属于对象。上面的extends扩展类时,这个静态方法也会继承的哈。静态方法中如果直接使用构造函数定义的属性也是不行的。
class Person { constructor(food){ this.food = food } static eat(v){
console.log(this.food);//undefined retutrn "我在吃"+v; } }
let p = new Person("米饭");
p.eat();// error p里面并没有eat方法;
Person.eat(p.food);// 我在吃米饭