我正在尝试为布尔值创建一个切换方法,我无法弄清楚如何设置布尔值,这是我的代码:
var booleanMethod = Boolean.prototype
booleanMethod.toggle = function() {
//something like this.value = !this.value
}
答案 0 :(得分:0)
简单回答:你不能。
在原型内部,this
引用对象的当前实例,在本例中为Boolean
。您无法修改this
- 它是值。您不能为值赋值,只能为值赋值。
this = !this;
就像说true = false
没有任何意义。
此外,您无法在实例的方法中更改实例本身。当然,您可以使用setter更改实例的属性,但无法更改实例。这打破了设计模式,您不能只是将实例重新分配给实例方法中的其他内容。说我们有一个苹果。你不能把苹果变成橙子或其他苹果。
最后,否定外面的价值有什么不对?您无法更改该实例的方法中的实例,但您可以重新分配对该实例的引用。
回到苹果和橙色的例子,想象你现在手里拿着苹果。你不能改变苹果本身,它总是会成为特定的苹果,但你可以改变你手中的水果,手是参考,水果是一个实例。
在这种情况下,你可以在实例方法之外取消它:
let x = false; //or Boolean(false)
x = !x;
使用NOT运算符没有任何问题。