JavaScript类:(三)方法

一、静态方法

静态方法,是类本身的方法,而不是对象的实例方法;
静态方法通过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');
    }
}

你可能感兴趣的:(JavaScript类:(三)方法)