一、静态方法
静态方法,是类本身的方法,而不是对象的实例方法;
静态方法通过static
关键字声明;
class Person {
static desc() {
console.log('Persion类');
}
}
Person.desc()
let person1 = new Person();
person1.desc()

静态方法只能通过
Class.method()
来调用;
不能通过实例对象调用静态方法,会报错;
二、私有方法
私有方法,是指只能在类内部访问的方法,不能再类的外部调用;
私有方法,需要在方法名之前加#来表示;
class Person {
desc() {
this.#privateDesc();
}
#privateDesc() {
console.log('private');
}
}
let person1 = new Person();
person1.desc(); // 输出private
person1.#privateDesc();

私有方法在外部调用会报错;
三、this
的指向
先看一下一段代码:
class Person {
desc() {
this.privateDesc();
}
privateDesc() {
console.log('private');
}
}
let person1 = new Person();
let { desc } = person1;
desc();

上述代码,正常结果,应该是打印
private
,但实际上却报错了;
代码中,
desc
方法中的this
默认指向Person
类的实例
但是如果将desc
方法提出来单独使用,this
会指向该方法运行时所在的环境(由于class内部是严格模式,所以this
实际指向是undefined
),从而导致privateDesc
找不到而报错;
有两种方式可以解决上面的问题;
- 构造方法中,绑定
this
;
class Person {
constructor() {
this.desc = this.desc.bind(this);
}
...
}
- 使用箭头函数
class Person {
desc = () => {
this.privateDesc();
}
privateDesc = () => {
console.log('private');
}
}
网友评论