Javascript 类,使用对象和可选值进行初始化

问题描述 投票:0回答:1

我对下面的代码有一些疑问:

export class Person {
    constructor(obj = { id: 0, name: '', lastName: '', eyeColor: '', age: 0 }) {
        this.id = obj.id;
        this.name = obj.name;
        this.lastName = obj.lastName;
        this.eyeColor = obj.eyeColor;
        this.age = obj.age;
    }

    yearOfBirth() {
        return new Date().getFullYear() - this.age;
    }

    json() {
        return JSON.stringify(this);
    }
}

FWIW:我更喜欢使用以下语法创建对象:

let newPerson = new Person(
  { 
    id: 0, 
    name: "Werner", 
    lastName: "Venter", 
    age: 37
  }
);

我真的不喜欢这样:

let newPerson = new Person(0, "Werner", "Venter", 37);

当我有参数名称和值时,它对我来说更容易阅读。无论如何,我离题了......

  1. 这是创建对象类的正确/可接受的方法吗?我将使用它从 API 接收数据,并以 JSON 格式发送数据。
  2. 如何使参数可选?我需要这个的主要原因是在 API 上创建新条目时不需要 ID 值,因此我宁愿在创建对象时不包含 ID 值。
  3. 最后,您对这种做法有什么意见/建议吗?

提前谢谢你们。真的很感谢这个社区。

javascript class constructor poco
1个回答
0
投票

这是创建对象类的正确/可接受的方法吗?我将使用它从 API 接收数据,该 API 以 JSON 格式发送数据。

是的,您已经创建了一个处理对象的某些属性的类,这样您就必须将一个类传递给构造函数。 (因为你使用了诸如 obj.name 之类的语句)

如何使参数可选?我需要这个的主要原因是在 API 上创建新条目时不需要 ID 值,因此我宁愿在创建对象时不包含 ID 值。

您刚刚通过声明 obj = 进行了操作,请注意,通过此处所做的操作,如果在创建 Person 的新实例时没有传递任何对象,则您提供的默认对象将用作默认值。

let newPerson = new Person(0, "维尔纳", "文特尔", 37);

顺便说一句,这个是错误的,你的构造函数方法除了一个参数之外,而在上面的示例中提供了 4 个参数。

这种方式确实是正确的(但它拖了一个错误,因为没有提供 eyeColor):

让 newPerson = new Person( { 编号: 0, 姓名:“维尔纳”, 姓氏:“文特尔”, 年龄:37 } );

© www.soinside.com 2019 - 2024. All rights reserved.