JS 中,怎么给 Object 内的所有 Object 添加一个键值对呢?

2022-02-17 13:57:53 +08:00
 Akebono
const object = {
    tom:{
        action:{
            eat:()=>{console.log("tom-eat")}
        }
    }
    jerry:{
    	action:{
            eat:()=>{console.log("jerry-eat")}
        }
	}
    me:{
        action:{
            eat:()=>{console.log("me-eat")}
        }
    }
}

假设有这么一个 Object ,

除了遍历和手动输入以外,怎么给这个 Object 内所有的 [key].action 内添加一个 nightshow: [key].action.eat() 键值对呢?

谢谢!

1529 次点击
所在节点    问与答
11 条回复
dcalsky
2022-02-17 14:10:24 +08:00
js 、ruby 、python 给我最大的感受就是花在思考奇技淫巧上的时间远比老老实实写遍历来得多。
YouMoeYi
2022-02-17 14:12:20 +08:00
直接整个类, 然后把 tom, jerry, me, 这些 new 出来不行吗
为啥不考虑遍历, 也没多麻烦
shintendo
2022-02-17 14:13:10 +08:00
Object.values(object).forEach(x => x.action.nightshow = x.action.eat())

这不需要什么奇技淫巧啊
YouMoeYi
2022-02-17 14:18:22 +08:00
@shintendo 你这把 object 整成数组了吧, key 也丢了
shintendo
2022-02-17 14:28:25 +08:00
TomVista
2022-02-17 14:30:23 +08:00
Object.prototype.action={eat}
proger
2022-02-17 14:37:11 +08:00
[key].action.eat() 把这个没有返回值的空函数赋值过去好像没有意义吧,只能得到 nightshow = undefined
YouMoeYi
2022-02-17 14:41:37 +08:00
@shintendo 没事 我傻了 传引用 SRY
Pipecraft
2022-02-17 15:03:35 +08:00
用 Proxy 可以做到
acthtml
2022-02-17 15:57:55 +08:00
可以使用 proxy.
new Proxy(target, handler)
gen900
2022-02-18 08:11:08 +08:00
for(key in object) object.key.action.nightshow = object.key.action.eat()

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/834493

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX