有人可以帮我理解下面代码的行为吗?:
wrapperProperties () {
let properties = this.getToValueOf('wrapper', {})
[properties['type'], properties['message']] = this.defineValidationState()
return properties
}
我收到以下警告:
[Vue警告]:渲染函数出错:“TypeError:无法读取未定义的属性'type'”
当我在let
关键字和解构分配之间添加任何变量时,代码成功完成:
wrapperProperties () {
let properties = this.getToValueOf('wrapper', {}), mysteriousVar
[properties['type'], properties['message']] = this.defineValidationState()
return properties
}
为什么会这样?
答案 0 :(得分:2)
问题在于:
let properties = this.getToValueOf('wrapper', {})
[properties['type'], properties['message']]
被解释为:
let properties = this.getToValueOf('wrapper', {})[properties['type'], properties['message']]
因此,不使用解构,而是使用[]
语法将其解释为属性访问。
您应该在每个语句的末尾插入分号,或者您应该真正阅读并理解standard.js编码标准。根据standard.js,您必须在以{
或[
开头的每一行的开头添加分号。
我个人喜欢经典" Douglas Crockford"样式,所以我在每个语句的末尾添加一个分号。但无论哪种方式都有效:
"克罗克福德"式:
wrapperProperties () {
let properties = this.getToValueOf('wrapper', {});
[properties['type'], properties['message']] = this.defineValidationState();
return properties;
}
Standard.js风格:
wrapperProperties () {
let properties = this.getToValueOf('wrapper', {})
;[properties['type'], properties['message']] = this.defineValidationState()
return properties
}