Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么是;setter是在没有getter的情况下定义的;JSHint错误?_Javascript_Jshint_Lint - Fatal编程技术网

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);
    }
};