在 JS 中更改对象属性

时间:2021-06-01 10:03:34

标签: javascript class object getter setter

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

我正在尝试创建一个类 toDo,它假设代表待办事项列表中的项目。项目(或对象)应该有一个名称和一个状态。状态称为完成,表示列表中的项目是否完成。构造对象时,我将 done=false 设置为默认值。但是,我希望我的班级具有该功能,以便我可以将其更改为 done=true。我的尝试如下所示。如果我调用状态设置器将 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

1 个答案:

答案 0 :(得分:2)

如评论中所述,您调用 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 意味着一个空值,这与 undefined 不同。如果您将它传递给任何具有默认参数的函数,该参数将取值为 null。

相关问题