V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Akebono
V2EX  ›  问与答

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

  •  
  •   Akebono · 283 天前 · 1005 次点击
    这是一个创建于 283 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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() 键值对呢?

    谢谢!

    11 条回复    2022-02-18 08:11:08 +08:00
    dcalsky
        1
    dcalsky  
       283 天前
    js 、ruby 、python 给我最大的感受就是花在思考奇技淫巧上的时间远比老老实实写遍历来得多。
    YouMoeYi
        2
    YouMoeYi  
       283 天前
    直接整个类, 然后把 tom, jerry, me, 这些 new 出来不行吗
    为啥不考虑遍历, 也没多麻烦
    shintendo
        3
    shintendo  
       283 天前   ❤️ 1
    Object.values(object).forEach(x => x.action.nightshow = x.action.eat())

    这不需要什么奇技淫巧啊
    YouMoeYi
        4
    YouMoeYi  
       283 天前
    @shintendo 你这把 object 整成数组了吧, key 也丢了
    shintendo
        5
    shintendo  
       283 天前
    TomVista
        6
    TomVista  
       283 天前
    Object.prototype.action={eat}
    proger
        7
    proger  
       283 天前
    [key].action.eat() 把这个没有返回值的空函数赋值过去好像没有意义吧,只能得到 nightshow = undefined
    YouMoeYi
        8
    YouMoeYi  
       283 天前
    @shintendo 没事 我傻了 传引用 SRY
    Pipecraft
        9
    Pipecraft  
       283 天前
    用 Proxy 可以做到
    acthtml
        10
    acthtml  
       283 天前
    可以使用 proxy.
    new Proxy(target, handler)
    gen900
        11
    gen900  
       283 天前 via iPhone
    for(key in object) object.key.action.nightshow = object.key.action.eat()
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2895 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 00:59 · PVG 08:59 · LAX 16:59 · JFK 19:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.