保存财产并同时拥有吸气剂

时间:2018-09-07 14:20:50

标签: javascript class

我正在尝试在班级内拥有私有财产。我有一个名为Person的类和该类的一个实例:personlet person = new Person('name1')声明。

我想将名称保存在person的属性中。我可以简单地做到:

class Person {

  constructor(name) {

    this.name = name;

  }

}

但是我也想在更改此值时执行一些操作,所以我使用了一个Setter:

class Person {

  set name() {

    // some actions 

  }

  constructor(name) { }

}

但是如何保存名称?我将不得不拥有另一个属性,例如_name,该属性将用于保存实际值

class Person {

  set name(newName) {

    // some actions
    return this._name;

  }

  set name(newName) {

    this._name = name;
    // some actions

  }

  constructor(name) {

    this._name = name;

  }

}

问题是_name可以通过person._name在外部访问。

有没有办法使它不能从外部访问?


我从this answer(不使用getter和setter)中汲取了灵感,并尝试在定义getter和setter时将_name括起来。以下代码不起作用:

class Person {

    constructor(name) {

        var _name = name;
        Object.defineProperties(this, {
            "name": {
                 "get": () => { return _name; },
                 "set": () => { _name = name; }
            }
        });

    }
}

1 个答案:

答案 0 :(得分:3)

  

“ set”:()=> {_name =名称; }

您在这里只是一个小错误。应该是:

"set": (newName) => { _name = newName; }
相关问题