Свойство JavaScript / ES6 не использует setter при установке значения в конструкторе - PullRequest
3 голосов
/ 20 октября 2019

У меня есть класс с конструктором и парой свойств.

const _id = new WeakMap();

class Product {
    constructor(Id) {
        _id.set(this, Id);  // set 
    }
    get Id(){
        return _id.get(this);
    }
    set Id(value){
        if(value <= 0) throw new Error("Invalid Id");
        _id.set(this, value);
    }
    show() {
        alert(`Id : ${_id.get(this)}`);  // get 
    }
}


const p = new Product(-3);
// p.Id = -5;        // set 
window.alert(p.Id);   // get  (-3) problem ???  

// p.show();

Замечено, когда я устанавливаю Id при создании объекта, сеттер не используется.

Как можноЯ делаю набор идентификаторов в конструкторе использовать сеттер?

1 Ответ

1 голос
/ 20 октября 2019

Вы не устанавливаете Id в конструкторе, чтобы установить его (используйте установщик), используйте это:

this.Id = Id;

Вот пример:

const _id = new WeakMap();

class Product {
    constructor(Id) {
        this.Id = Id;
    }
    get Id(){
        return _id.get(this);
    }
    set Id(value){
        if(value <= 0) throw new Error("Invalid Id");
        _id.set(this, value);
    }
    show() {
        alert(`Id : ${_id.get(this)}`);  // get 
    }
}


const p = new Product(-3);
// p.Id = -5;        // set 
window.alert(p.Id);   // get  (-3) problem ???  

// p.show();
...