美文网首页
JavaScript类:(三)方法

JavaScript类:(三)方法

作者: fanren | 来源:发表于2022-10-21 17:30 被阅读0次

    一、静态方法

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

          本文链接:https://www.haomeiwen.com/subject/yvzezrtx.html