为什么“setter是在没有getter的情况下定义的”JSHint错误?

时间:2014-04-30 23:26:03

标签: javascript jshint lint

参考jsfiddle

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

JSHint标记为" setter是在没有getter"的情况下定义的。我确信有一种方法可以关闭它,但为什么这是一个错误呢?我所见过的所有JSHint旗帜都有一个合理的解释。我无法想出为什么这是一件坏事。

3 个答案:

答案 0 :(得分:7)

我不认为JSHint有充分的理由警告这种情况。我没有在规范中看到任何内容(http://www.ecma-international.org/publications/standards/Ecma-262.htm,第30-31页),如果有一个setter,则需要有一个getter,反之亦然,并且很容易想象一个setter没有&# 39;意味着一个吸气剂。例如,您可能希望在setter中设置脏标志。没有理由定义一个吸气剂。

我没有在JSHint来源或其历史中看到理由。

答案 1 :(得分:1)

这很可能被标记,因为它是可疑的。只写属性是一件相当不寻常的事情。你故意这样做的几率远低于你犯错误的几率。这与写foo == null时的警告类似 - 它不是非法的,甚至必然错误,但它更可能是错误的。

答案 2 :(得分:0)

你也可以拥有这样的代码,你会得到相同的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);
    }
};