我的一个课程中有以下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;
}
没有随附的二传手.在行返回this.password = text我收到此错误:
Uncaught TypeError: Cannot set property password of # which has only a getter
但是,此时应删除getter,它应该没有名为password的属性.我实际上是从MDN的页面here(页面上的最后一个代码片段)中获取了这个想法.
任何人都知道为什么会这样吗?
在Chrome 51和Node.js(v6.0.0)上测试过.
解决方法:
如评论中所述,您无法删除不存在的内容. password不是用户的属性,而是其原型的属性;所以删除user.password什么都不做;如果你然后执行user.password =“foo”,你会在原型上找到属性用户,这是不可设置的.
相反,您需要在用户自己上定义一个属性:
class User {
get password() {
Object.defineProperty(this, "password", {
value: "foo"
});
return this.password;
}
};
var user = new User();
console.log(user.password);