我试图掌握es6类,我似乎无法将布尔值传递给构造函数。
在以下代码中
autoDisplay
true
始终为autoDisplay
,无论在创建类的实例时传递给它的是什么,它都采用默认值。
如果我将minSdkVersion 15
targetSdkVersion 23
更改为字符串,则可以正常工作。
您是否无法将布尔值传递给构造函数?
答案 0 :(得分:3)
false || true
始终为true
。 ||
的评估方式如下:
所以||
不是这样做的方法。如果您希望能够提供任何其他虚假价值,例如0
,""
,null
等,您也会遇到麻烦。
你可以使用typeof options.autoDisplay === "undefined"
或"autoDisplay" in options
(更多this question及其答案)
this.autoDisplay = typeof options.autoDisplay === "undefined" ? true : options.autoDisplay;
...但您使用的是ES2015(“ES6”),因此您可以使用默认参数和参数解构来避免所有样板:
constructor({message = 'default cookie message', autoDisplay = true} = {}) {
this.message = message;
this.autoDisplay = autoDisplay;
console.log(this.message, "|", this.autoDisplay);
}
直播示例:
class site_alert {
constructor({message = 'default cookie message', autoDisplay = true} = {}) {
this.message = message;
this.autoDisplay = autoDisplay;
console.log(this.message, "|", this.autoDisplay);
}
}
new site_alert();
new site_alert({autoDisplay:false});
new site_alert({message:"custom message"});
请注意,在我们的功能代码中,我们甚至不再拥有options
;在调用函数时,参数将从我们的选项对象中解构出来。
让我们来看看这个宣言:
{message = 'default cookie message', autoDisplay = true} = {}
{message = 'default cookie message', autoDisplay = true}
部分说:
{}
)message
属性,则默认为“默认Cookie消息” ...而= {}
部分说:如果没有给出参数,则默认为空白对象(之后上面的两个默认值将开始)。
旁注:JavaScript中压倒性的约定是构造函数(类)使用大写首字母(通常在CappedCamelCase中)编写,因此SiteAlert
而不是site_alert
。你不必遵循惯例,但如果你不知道就把它标记出来。