如何从对象中动态调用带UID后缀的lastTime Cookie?
你遇到的问题核心是:直接用点语法访问cookies.lastTime时,对象中不存在这个属性,只有拼接了UID的lastTime_xxx属性。以下两种方案可以让你保持类似点语法的调用习惯,自动关联UID获取目标Cookie:
方法一:使用Proxy代理对象
这是最灵活的方案,能完全模拟点语法的调用体验,代理会自动帮你拼接UID后缀查找属性:
// 原始Cookie对象(转换后的) const rawCookies = { 'lastTime_1346234672457124': '2024-05-20 14:30:00', 'token_1346234672457124': 'abc123xyz' }; // 当前用户UID const uid = '1346234672457124'; // 创建代理后的Cookie对象 const cookies = new Proxy(rawCookies, { get(target, propName) { // 拼接完整属性名 const fullKey = `${propName}_${uid}`; // 返回对应值,不存在则返回undefined return target[fullKey]; } }); // 直接用点语法调用即可 console.log(cookies.lastTime); // 输出 '2024-05-20 14:30:00' console.log(cookies.token); // 输出 'abc123xyz'
如果后续UID发生变化,只需要更新uid变量,代理会自动使用新UID拼接,无需修改其他逻辑。
方法二:手动添加自定义Getter属性
如果不想使用Proxy,可以给原始对象添加Getter属性,实现点语法访问:
const rawCookies = { 'lastTime_1346234672457124': '2024-05-20 14:30:00' }; const uid = '1346234672457124'; // 给指定前缀添加Getter function setupDynamicCookie(obj, prefix) { Object.defineProperty(obj, prefix, { get() { return obj[`${prefix}_${uid}`]; } }); } // 为lastTime添加Getter setupDynamicCookie(rawCookies, 'lastTime'); // 点语法调用 console.log(rawCookies.lastTime); // 输出对应Cookie值
如果有多个需要动态访问的前缀(比如token、userName),可以循环批量添加Getter。
内容的提问来源于stack exchange,提问作者Wan33
相关产品推荐
相关产品推荐

