首先我们来了解一下什么是Class类:
我们可以将ES6中的Class类看做是一个语法糖,它的绝大部分功能,ES5 都可以做到,新的Class类写法,只是让对象原型的写法更加清晰、更像面向对象编程的语法而已。
接下来了解一下Class类中都有什么方法供我们使用:
1.constructot()方法
constructor()方法是类的默认方法(我们也称之为:构造器),通过new命令生成对象实例时,自动调用该方法。constructor()方法默认返回实例对象(也就是this),也可以指定返回另一个对象。一个类必须有constructor()方法,如果没有显示定义,一个空的constructor()方法会被默认添加。
class Point {
}
// 等同于
class Point {
constructor() {}
}
2.取值函数 (getter) 和 存值函数 (setter)
<script>
class Dog {
constructor(name, age) {
this.name = name;
this._age = age;
}
run() {
console.log("宇宙第一快");
}
// 设置需要带有参数
set age(a) {
if (a < 0) a = 0;
if (a > 20) a = 20;
this._age = a
}
// 获取需要带有返回值
get age(){
return this._age;
}
}
const d = new Dog("老黄", 9);
d.age = 21;//进行赋值
console.log(d.age);
</script>
3.静态方法:
类相当于实例的原型,所有在类中定义的方法,都会被实例继承。如果在一个方法前,加上static关键字,就表示该方法不会被实例继承,而是直接通过类来调用,这就称为“静态方法”。
<script>
class Fn{
static classFn(){
return "hello";
}
}
console.log(Fn.classFn());//hello
let fn = new Fn();
fn.classFn();//Uncaught TypeError: fn.classFn is not a function
</script>
上面代码中,Fn类的classFn方法前有static关键字,表明该方法是一个静态方法,可以直接在Fn类上调用( fn.classFn() ),而不是在Fn类的实例上调用。如果在实例上调用静态方法,会抛出一个错误,表示不存在该方法。
注意,如果静态方法包含this关键字,这个this指的是类,而不是实例。
<script>
class Fn {
static car() {
this.bur();
}
static bur() {
console.log('hello');
}
bur() {
console.log('world');
}
}
Fn.car() // hello
Fn.bur();//静态方法可以直接使用类调用
let f = new Fn();
f.bur();//普通方法则需要实例对象调用
</script>
父类的静态方法可以被子类继承:
<script>
class father{
static fatherStatic(){
console.log("father");
}
}
class son extends father{
}
son.fatherStatic();//father
</script>
静态方法也是可以从super对象上调用的:
4.静态属性:
静态属性指的是 Class 本身的属性,而不是定义在实例对象(this)上的属性。
<script>
// 方法一:
class myClass {
static myStatic = 10;//加上static 即为静态属性
constructor() {
console.log(myClass.myStatic);
}
}
let m = new myClass();//创建实力的时候自动执行constructor()
</script>
<script>
//方法二:
class myClass {
static myStatic = 10;//加上static 即为静态属性
}
let m = myClass.myStatic;//创建实例,通过实例调用
console.log(m);
</script>
1万+

被折叠的 条评论
为什么被折叠?



