代码之家  ›  专栏  ›  技术社区  ›  Ivan Jeffrey Zhao

保存一个属性并同时拥有一个getter[复制]

  •  2
  • Ivan Jeffrey Zhao  · 技术社区  · 7 年前

    我想在我的班级里有一个私人财产。我有一门课叫 Person person 声明 let person = new Person('name1') .

    的属性。我可以简单地做:

    class Person {
    
      constructor(name) {
    
        this.name = name;
    
      }
    
    }
    

    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;
    
      }
    
    }
    

    问题是 person._name

    有没有办法让它不能从外面进入?


    我的灵感来自 this answer _姓名 定义getter和setter时。以下代码不起作用:

    class Person {
    
        constructor(name) {
    
            var _name = name;
            Object.defineProperties(this, {
                "name": {
                     "get": () => { return _name; },
                     "set": () => { _name = name; }
                }
            });
    
        }
    }
    
    1 回复  |  直到 7 年前
        1
  •  3
  •   Nicholas Tower    7 年前

    “set”:()=>{u name=name;}

    "set": (newName) => { _name = newName; }
    
    推荐文章