Comment implémenter des restrictions d'accès sur les attributs de la classe class en JavaScript ? Explication détaillée de statique, public, protégé, privé

Comment implémenter des restrictions d'accès sur les attributs de la classe class en JavaScript ?

statique

En JavaScript, le mot-clé static est utilisé pour définir des propriétés statiques ou des méthodes statiques ;
il permet de manipuler certaines variables et méthodes globalement à travers la classe elle-même

	//  示例代码
    class Prent {
    
    
        static age = 99;
        // 静态方法
        static getAge() {
    
    
            console.log(this.age);
        }
    }
    Prent.getAge();
    console.log(Prent.age)

public

Comment définir une propriété publique afin que l'intérieur et l'extérieur de la classe et des sous-classes héritées soient accessibles ?
Très simple, généralement défini dans la classe est la propriété publique

    // 示例代码
    class Prent {
    
    
        constructor(name) {
    
    
            // 公共属性
            this.name = name || 'xiao';
        }
        // 公共方法
        getName() {
    
    
        	//  内部访问
            console.log(this.name)
        }
    }
    const p = new Prent();
    //  外部访问
    p.getName();
    console.log(p.name)
    class Son extends Prent {
    
    
    }
    const s = new Son();
    //  子类访问
    s.getName();
    console.log(s.name)

protégé

Créer une classe pour protéger ses propriétés internes, rendant l'extérieur inaccessible, seules la classe actuelle et ses sous-classes peuvent accéder
et définir ses propriétés internes via des getters et des setters

    // 内部对属性进行保护,使外部不能进行访问
    // 方式一
    const HOST = Symbol("host")
    // 方式二
    const HOSTWEAKMAP = new WeakMap();
    
    class Prent {
    
    
        constructor() {
    
    
            // 属性保护,只能当前类和子类能够访问
            this[HOST] = 'www.baidu.com';
            HOSTWEAKMAP.set(this, 'www.qq.com');
        }
        get host() {
    
    
            return this[HOST]
        }
        get hostweak() {
    
    
            return HOSTWEAKMAP.get(this);
        }
    }
    const p = new Prent();
    console.log(p.host)
    console.log(p.hostweak)
    
    class Son extends Prent {
    
    
    }
    const s = new Son();
    console.log(s.host)
    console.log(s.hostweak)

privé

La création de propriétés privées à l'intérieur d'une classe ne peut être utilisée qu'en interne, et ni les classes externes ni les sous-classes ne peuvent y accéder.
Nous pouvons utiliser # pour déclarer des propriétés privées

    class Prent {
    
    
        // 私有属性
        #name = "456xxx";
        // 私有方法
        #getName() {
    
    
            console.log(this.#name)
        }
        // 公共方法
        getName() {
    
    
            this.#getName();
        }
    }
    const p = new Prent();
    p.getName();
    // 访问将会报错 Property '#getName' is not accessible outside class 'Prent' because it has a private identifier.
    // p.#getName();
    class Son extends Prent {
    
    
    }
    const s = new Son();
    // 子类只能通过父类暴露公共方法来访问其内部私有属性
    s.getName();

Guess you like

Origin blog.csdn.net/xiaorunye/article/details/129867935