Javascript 不允许我设置 属性 尽管删除了 getter 但它只有 getter
Javascript won't let me set property which only has a getter despite deleting 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;
}
没有随行setter。在 return this.password = text
行我得到这个错误:
Uncaught TypeError: Cannot set property password of # which has only a getter
不过,此时应该删除getter,并且应该没有属性调用的密码。我实际上从 MDN 的页面 here(页面上的最后一个代码片段)中获取了这个想法。
有人知道为什么会这样吗?
在 Chrome 51 和 Node.js (v6.0.0) 上测试。
如评论中所述,您无法删除不存在的内容。 password
不是 user
的 属性,而是它的原型;所以 delete user.password
什么都不做;如果你再做user.password = "foo"
,你会发现原型上的属性 user
是不可设置的
相反,您需要在 user
本身上定义一个 属性:
class User {
get password() {
Object.defineProperty(this, "password", {
value: "foo"
});
return this.password;
}
};
var user = new User();
console.log(user.password);
我的 类 之一中有以下 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;
}
没有随行setter。在 return this.password = text
行我得到这个错误:
Uncaught TypeError: Cannot set property password of # which has only a getter
不过,此时应该删除getter,并且应该没有属性调用的密码。我实际上从 MDN 的页面 here(页面上的最后一个代码片段)中获取了这个想法。
有人知道为什么会这样吗?
在 Chrome 51 和 Node.js (v6.0.0) 上测试。
如评论中所述,您无法删除不存在的内容。 password
不是 user
的 属性,而是它的原型;所以 delete user.password
什么都不做;如果你再做user.password = "foo"
,你会发现原型上的属性 user
是不可设置的
相反,您需要在 user
本身上定义一个 属性:
class User {
get password() {
Object.defineProperty(this, "password", {
value: "foo"
});
return this.password;
}
};
var user = new User();
console.log(user.password);