JavaScript中如何实现对象属性随关联变量更新自动同步?
实现方案
该需求可以通过JS的**访问器属性(getter/setter)**实现,完全符合你要求的「每次访问属性时读取变量最新值返回」的逻辑。
方案1:对象字面量直接定义getter
代码示例:
var rollNum = 459; var classObj = { // 定义studentId为getter属性 get studentId() { return rollNum; } }; // 测试效果 console.log(classObj.studentId); // 输出 459 rollNum = 125; console.log(classObj.studentId); // 输出 125,和rollNum同步更新
方案2:双向绑定(可选)
如果需要支持修改classObj.studentId时同步更新rollNum,可以追加setter逻辑:
var classObj = { get studentId() { return rollNum; }, set studentId(newVal) { rollNum = newVal; } }; // 测试双向同步 classObj.studentId = 999; console.log(rollNum); // 输出 999
方案3:给已存在的对象追加动态属性
如果classObj已经创建完成,后续才需要加这个动态绑定的属性,可以用Object.defineProperty实现:
var classObj = {}; Object.defineProperty(classObj, 'studentId', { get: () => rollNum, set: (val) => { rollNum = val }, enumerable: true // 配置属性可枚举,按需开启 });
原理解释
普通对象属性初始化时会直接把变量的值复制存储,和原变量断开关联;而getter属性不会存储固定值,每次访问该属性时都会实时执行get函数内的逻辑,返回最新的计算结果,自然就能和rollNum变量保持永久关联。
内容的提问来源于stack exchange,提问作者Raja G
相关产品推荐
相关产品推荐

