尽管删除了getter,Javascript仍然不允许我设置只有getter的属性

时间:2016-07-02 00:01:22

标签: javascript getter

我的一个课程中有以下getter:

get password(){
        if(this._public) return null;

        var text = "";
        var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";    
        for (var i = 0; i < 10; i++) {
            text += possible.charAt(Math.floor(Math.random() * possible.length));   
        }

        delete this.password;
        return this.password = text;
}

没有随附的二传手。在return this.password = text行上,我收到此错误:

  

未捕获的TypeError:无法设置只有getter的#的属性密码

但是,此时应删除getter,它应该没有名为password的属性。实际上,我从MDN的页面here(页面上的最后一个代码段)中获取了这个想法。

任何人都知道为什么会这样吗?

在Chrome 51和Node.js(v6.0.0)上测试。

1 个答案:

答案 0 :(得分:7)

正如评论中所述,您无法删除那些不存在的内容。 password不是user的属性,而是其原型的属性;所以delete user.password什么都不做;如果你然后user.password = "foo",你会在原型上找到属性user,这是不可设置的。

相反,您需要在user本身上定义一个属性:

&#13;
&#13;
class User {
  get password() {
    Object.defineProperty(this, "password", {
      value: "foo"
    });
    return this.password;
  }
};

var user = new User();
console.log(user.password);
&#13;
&#13;
&#13;