JavaScript:如何在继承前修改类配置并使修改后的值全局恒定?
实现全局恒定的Config配置及继承前修改数据的方案
一、让Config配置全局恒定的两种方法
1. 使用静态属性存储全局配置
通过类的静态属性保存配置值,所有实例和子类共享这个静态属性,确保任何地方修改后,所有调用都会拿到最新值。
class Config { static globalConfig = null; constructor(config) { if (config !== undefined) { Config.globalConfig = config; } this.config = Config.globalConfig; } // 提供静态方法统一修改配置 static updateConfig(newConfig) { Config.globalConfig = newConfig; } } class Data extends Config { constructor() { super(); console.log(this.config); } } // 初始化配置 new Config('123456789'); new Data(); // 输出 '123456789' // 任意位置修改配置 Config.updateConfig('987654321'); new Data(); // 输出 '987654321'
2. 单例模式确保唯一实例
让Config类只能创建一个实例,所有地方调用的都是同一个实例,配置自然保持恒定。
class Config { static instance = null; config = null; constructor(config) { if (Config.instance) { if (config !== undefined) { Config.instance.config = config; } return Config.instance; } this.config = config; Config.instance = this; } static getInstance(config) { if (!Config.instance) { Config.instance = new Config(config); } else if (config !== undefined) { Config.instance.config = config; } return Config.instance; } } class Data extends Config { constructor() { super(); console.log(this.config); } } new Config('123456789'); new Data(); // 输出 '123456789' new Config('987654321'); new Data(); // 输出 '987654321'
二、继承前修改数据并在继承后使用
1. 实例化子类前修改全局配置
在子类实例化之前,通过Config的静态方法或直接修改静态属性更新配置,子类继承后实例化时会自动使用最新值。
// 提前修改全局配置 Config.updateConfig('pre-modified config'); class Data extends Config { constructor() { super(); console.log(this.config); // 输出 'pre-modified config' } } new Data();
2. 子类内部主动修改配置后使用
在子类构造函数中,先调用Config的静态方法修改配置,再执行super(),这样子类实例会使用修改后的配置。
class Data extends Config { constructor(customConfig) { // 先更新全局配置 Config.updateConfig(customConfig); super(); console.log(this.config); // 输出传入的customConfig } } new Data('child-customized config'); // 输出 'child-customized config'
内容的提问来源于stack exchange,提问作者Hi 1999
相关产品推荐
相关产品推荐

