Javascript 为什么是;setter是在没有getter的情况下定义的;JSHint错误?
参考文献Javascript 为什么是;setter是在没有getter的情况下定义的;JSHint错误?,javascript,jshint,lint,Javascript,Jshint,Lint,参考文献 JSHint将其标记为“setter是在没有getter的情况下定义的”。我确信有一种方法可以关闭此功能,但为什么这是一个错误呢?我所看到的一切都有一个合理的解释。我想不出这是件坏事的原因。我认为JSHint没有充分的理由警告这种情况。我在规范(,第30-31页)中没有看到任何要求有getter(如果有setter)的内容,反之亦然,很容易想象setter并不意味着getter。例如,您可能希望在setter中设置脏标志。没有理由定义一个getter 我在JSHint源代码或其历史记录
JSHint将其标记为“setter是在没有getter的情况下定义的”。我确信有一种方法可以关闭此功能,但为什么这是一个错误呢?我所看到的一切都有一个合理的解释。我想不出这是件坏事的原因。我认为JSHint没有充分的理由警告这种情况。我在规范(,第30-31页)中没有看到任何要求有getter(如果有setter)的内容,反之亦然,很容易想象setter并不意味着getter。例如,您可能希望在setter中设置脏标志。没有理由定义一个getter
我在JSHint源代码或其历史记录中没有看到任何理由。这很可能是因为可疑而被标记的。只写属性是一件相当不寻常的事情。你故意这么做的几率比你犯错误的几率要低得多。这类似于编写
foo==null
时的警告-这不是非法的,甚至不一定是错误的,但更可能是错误而不是正确的。您也可以使用类似的代码,并且会得到相同的JSHint错误:
appSession: {
officername: "Denis Test",
get getOfficername() {
return `${this.officername}`;
},
set setOfficername(name) {
this.officername = name;
}
};
但是,如果getter和setter的名称与下面相同,并且前缀get
和set
在前面,则错误将消失:
get Officername() {
return `${this.officername}`;
},
set Officername(name) {
this.officername = name;
}
请注意,在这两个示例中,我命名方法的方式有所不同。对于您的情况,添加一个与“set”方法同名的get
方法,错误就会消失
var obj = {
set bla(k) {
console.log(k);
}
get bla(){
console.log(obj.bla);
}
};
我认为这是一个设计缺陷。只关心副作用的setter(在您的例子中是console.log)是非常规的,如果它们确实更改了实例,您可能希望您能够以某种方式读取新值。让它成为一种方法。这实际上在perl(只写语言)中更为常见。您可以这样禁用它:set:foo{}//jshint-w078我同意,setter有很多用例影响对象的行为或计算等,而没有理由对其进行
getFoo()
。如果getter和setter总是成对的,那么您已经将对象简化为过程语言结构
。这没有错,因为它不会将其标记为语法错误
,而只是警告“setter是在没有getter的情况下定义的”
var obj = {
set bla(k) {
console.log(k);
}
get bla(){
console.log(obj.bla);
}
};