【问题标题】:How to add property to object using bracket notation for object and string for property name?如何使用对象的括号表示法和属性名称的字符串向对象添加属性?
【发布时间】:2019-08-25 10:15:27
【问题描述】:

我想使用括号表示法来编写对象名称,以便我可以通过参数引用它。没关系,但是当我尝试编写属性名称而不将其作为参数传递时遇到了麻烦。重要的是要简单地写出属性名称而不是作为参数传递。什么是正确的语法?

这个例子展示了我尝试过的所有语法变化:

var foo = {};

bar('foo', 'cat');
function bar(object, prop) {
    
    // foo[prop] = 5; // = 5. This works, but this isn't the method I want to use. 
    
    // [object]cat = 5; // = error
    // [object].cat = 5; // = undefined
    // [object]['cat'] = 5; // = undefined
    // [object][cat] = 5; // = error
    
    console.log('= ' + foo.cat);
}

【问题讨论】:

    标签: javascript object syntax parameters notation


    【解决方案1】:

    由于foo 被声明为全局变量,窗口​​对象将在内部包含该对象。

    因此,您可以执行以下操作:

    window[object]['cat'] = 5;
    

    var foo = {};
    
    bar('foo');
    console.log('= ' + foo.cat);
    function bar(object) {
        window[object]['cat'] = 5;            
    }

    【讨论】:

    • 谢谢,但我特别想不将属性名称写为传递的参数,这就是您对 [prop] 所做的事情。
    • @forestkelley 所以,您可以执行以下操作:window[object]['cat'] = 5;
    • 确实有效,谢谢。为什么我需要使用window?在访问函数内部的对象时,我觉得我以前从未这样做过。
    • @forestkelley 因为没有动态变量名访问器之类的东西。
    【解决方案2】:

    只需将实际的对象引用传入:

    var foo ={}
    
    bar(foo, 'cat', 3);
    
    console.log('updated foo', foo);
    
    function bar(object, prop, val) {
        object[prop] = val;      
        console.log('= ' + foo.cat);
    }

    【讨论】:

    • 我不是想传入引用。我只是想将属性名称写为字符串而不是传入。@Ele 在他的评论中找到了解决方案。
    • 所以你知道你想使用foo 对象内栏吗?对于你真正需要什么还是有点模糊
    【解决方案3】:
    function bar(object, prop) {
      this[object] = this[object] || {};
      this[object][prop] = 5;
      console.log(foo.cat)
    }
    

    希望这会有所帮助!

    【讨论】:

    • thisnew 上下文中不使用时,在不同环境中可能是不同的东西
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 2015-08-15
    • 1970-01-01
    相关资源
    最近更新 更多