如何修改JavaScript类constructor初始化默认值使所有新实例统一生效
解决方案
以下方案均无需直接修改原constructor中this.age = 60的硬编码赋值,可按需选择:
方案1:提取默认值为静态属性(推荐,全局统一修改一次生效)
把age的默认值抽离为类的静态属性统一管理,后续只需修改静态属性的值,所有新创建的实例都会自动使用新的默认值:
class Person { // 新增静态属性存储默认值,原有constructor逻辑无需调整 static defaultAge = 60; constructor() { this.age = Person.defaultAge; } showAge() { return console.log(this.age); } } // 只需修改一次静态属性,后续所有新实例默认age都会更新 Person.defaultAge = 70; const mark = new Person(); mark.showAge(); // 输出70 const lily = new Person(); lily.showAge(); // 输出70
方案2:继承原类生成自定义子类(适合无法修改原类代码的场景)
如果原类是第三方引入的不可修改代码,可以通过继承创建子类,在子类构造函数中覆盖age的默认值,后续统一使用子类创建实例即可:
// 原Person类完全不做改动 class Person { constructor() { this.age = 60; } showAge() { return console.log(this.age); } } // 子类继承后修改age默认值 class CustomPerson extends Person { constructor() { super(); this.age = 70; } } const mark = new CustomPerson(); mark.showAge(); // 输出70
方案3:给构造函数增加默认参数(适合需要灵活传参的场景)
给构造函数增加带默认值的入参,创建实例时可以自定义age,也可以不传参使用新的默认值:
class Person { // 新增默认参数,原有赋值逻辑只需调整取值来源即可 constructor(age = 70) { this.age = age; } showAge() { return console.log(this.age); } } const mark = new Person(); // 不传参用默认值70 mark.showAge(); // 输出70 const tom = new Person(80); // 传参用自定义值 tom.showAge(); // 输出80
内容的提问来源于stack exchange,提问作者btew2102
相关产品推荐
相关产品推荐

