为什么";setter是在没有getter的情况下定义的";JSHint错误

Why is "setter is defined without getter" a JSHint error?

本文关键字:quot 情况 情况下 错误 JSHint 下定义 setter 为什么 getter      更新时间:2023-09-26

参考jsfiddle

var obj = {
  set bla(k) {
    console.log(k);
  }
};

JSHint将其标记为"setter是在没有getter的情况下定义的"。我确信有办法关闭它,但为什么这是一个错误呢?我所看到的所有JSHint标志都有一个合理的解释。我想不出为什么这是一件坏事。

我认为JSHint没有充分的理由警告这种情况。我看不到规范中的任何内容(http://www.ecma-international.org/publications/standards/Ecma-262.htm,第30-31页(,如果有setter,则需要有getter,反之亦然,并且很容易想象一个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的名称与下面相同,并且前缀getset在它们之前,那么错误就会消失:

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