Javascript 在JS中更改对象属性

Javascript 在JS中更改对象属性,javascript,class,object,getter,setter,Javascript,Class,Object,Getter,Setter,我是javascript新手,如果这是一个愚蠢的问题,请提前道歉 我正在尝试创建一个类toDo,它应该表示待办事项列表中的项目。项目(或对象)应具有名称和状态。状态称为“完成”,表示列表中的项目是否完成。构造对象时,我将done=false设置为默认值。但是,我希望我的类具有该功能,以便可以将其更改为done=true。我的尝试如下所示。如果我调用状态设置程序将done更改为done=true,我不理解为什么输出为false 感谢所有提示和解释。正如您可能从代码中看到的,我对这一点非常陌生。谢谢

我是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

如注释中所述,您调用setter的语法不正确。代码中还有一个输入错误,分别是\u 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。您希望它能够工作,因为它有一个默认参数,但这不是默认参数。我用未定义的调用了setter,即使这样它也能工作,这表明默认参数true正在发挥作用


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

如注释中所述,调用setter的语法不正确。代码中还有一个输入错误,分别是\u 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。您希望它能够工作,因为它有一个默认参数,但这不是默认参数。我用未定义的调用了setter,即使这样它也能工作,这表明默认参数true正在发挥作用


额外注意:不能对null执行相同操作,因为null表示空值,与未定义的值不同。如果将其传递给任何具有默认参数的函数,则param将取空值。

使用
this.\u name
this.\u在构造函数中完成了
?@evolutionxbox,可能是正确的开始位置。这将我的输出更改为:
Eat lunch undefined
you expect
item1.status
调用getter或setter,为什么特别希望选择一个呢?
item1.status
是setter,所以必须设置值
item1.status='something'
使用
this.\u name
this.\u done
在构造函数中?@evolutionxbox,可能是正确的开始位置。这将我的输出更改为:
Eat lunch undefined
you expect
item1.status
调用getter或setter,您为什么特别希望选择一个呢?
item1.status
是setter,因此必须设置值
item1.status='something'