gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 05:21:18 26 4
gpt4 key购买 nike

我的一个类(class)中有以下 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 这行我得到这个错误:

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 的属性,而是其原型(prototype)的属性;所以 delete user.password 什么都不做;如果您随后执行 user.password = "foo",您会发现原型(prototype)上的属性 user 是不可设置的。

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

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

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

关于尽管删除了 getter,Javascript 还是不允许我设置只有 getter 的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38155199/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com