在 JS 中更改对象属性

Changing object attributes in JS

我是 javascript 的新手,如果这是一个愚蠢的问题,请提前道歉。

我正在尝试制作一个 class 待办事项,它应该代表待办事项列表中的项目。项目(或对象)应该有一个名称和一个状态。状态称为完成,表示列表中的项目是否完成。在构造对象时,我将 done=false 设置为默认值。但是,我希望我的 class 具有该功能,以便我可以将其更改为 done=true。我的尝试如下所示。我不明白为什么调用状态 setter 将 done 更改为 done=true.

时输出为 false

感谢所有提示和解释。正如您可能从代码中看到的那样,我对此很陌生。谢谢

class toDo {
    constructor(name,done=false) {
        this.name = name;
        this.done = done;
    }

    get name() {
        return this._name;
    }

    get status() {
        return this._done;
    }

    set name(value) {
        this._name = value;
    }

    set status(state=true) {
        this._done = state;
    }

    
    /*set itemDone(state=true) {
        this._done = state;
    }*/

} 

var item1 = new toDo("Eat lunch");
console.log(item1.name);
item1.status;
console.log(item1.done);

我得到的输出是:

Eat lunch
false

如评论中所述,您调用 setter 的语法不正确。在 _donedone 的代码中也有错别字。要么完全删除下划线,要么在任何地方使用它。这是我将如何更改代码。


class toDo {
    constructor(name,done=false) {
        this._name = name;
        this._done = done;
    }

    get name() {
        return this._name;
    }

    get status() {
        return this._done;
    }

    set name(value) {
        this._name = value;
    }

    set status(state=true) {
        this._done = state;
    }

    
    /*set itemDone(state=true) {
        this._done = state;
    }*/

} 

var item1 = new toDo("Eat lunch");
console.log(item1.name);
item1.status = undefined; //item.status = true will work here. item.status = null will not work here.

console.log(item1._done);

如您所见,您必须使用 item.state = "x" 或类似的东西来调用 setter。你期望它能工作,因为它有一个默认参数,但这不是 case。我用 undefined 调用了 setter ,即使这样它也能工作,表明你的默认参数 true 正在发挥作用。

额外注意:您不能对 null 执行相同的操作,因为 null 表示空值并且与未定义不同。如果您将它传递给任何具有默认参数的函数,该参数将采用值 null。