javascript - 保存属性(property)并同时拥有 setter/getter

标签 javascript class

<分区>

我想在我的类(class)中拥有私有(private)属性(property)。我有一门课叫 Person和该类的一个实例:personlet person = new Person('name1') 声明.

我想把名字保存在person中的属性。我可以简单地做:

class Person {

  constructor(name) {

    this.name = name;

  }

}

但是我也想在改变这个值的时候执行一些 Action ,所以我使用了一个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)并试图包含 _name在定义 getter 和 setter 时。以下代码不起作用:

class Person {

    constructor(name) {

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

    }
}

最佳答案

"set": () => { _name = name; }

你这里只是犯了一个小错误。应该是:

"set": (newName) => { _name = newName; }

关于javascript - 保存属性(property)并同时拥有 setter/getter ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52224497/

相关文章:

javascript - 如何在 React Native 中使用导航器向组件动态添加新 Prop

java - Java 中的匿名类

c++ - 尝试调用成员函数指针将不起作用

python - 避免在实例变量定义中执行

c++ - 构造函数中的错误 : no instance of overloaded function, (C++)

c# - 代码找不到类

javascript - 在没有 Node.js 和 CDN 的网页中包含 Chart.js

javascript - 带分割的字符串格式占位符用于分隔字符串

javascript - 如何减去asp文本框值并将结果放入asp标签中

javascript - HTML - 没有绝对定位的 Div 到底部