【问题标题】:Object bracket notation in definition of an Object in javascript [duplicate]javascript中对象定义中的对象括号表示法[重复]
【发布时间】:2014-12-28 13:50:18
【问题描述】:
var events = {
                addEvent: function(element, type, fn, capture){
                     element.addEventListener(type, fn, capture);
                },
                removeEvent: function(){
                     element.removeEventListener(type, fn, capture);
                }
           }

我在对象字面量定义中寻找类似的东西来减少代码 事件对象只是一个例子

           var events = {
                            [action + "Event"]: function(element, type, fn, capture){
                                  element[action + "eventListener"](type, fn, capture);
                        }
                }
           }

我知道还有其他选择,例如

element.events.add(....) , element.events.remove(....)

或者这个选项

element.events("add", type, fn, capture) / element.events("remove", type, fn, capture)

【问题讨论】:

  • 这在 JavaScript 中是不可能的。在对象初始化器中,属性名称必须是常量。
  • 哪种方法最好?
  • 您可以使用单独的赋值语句和[ ] 运算符添加具有动态构造名称的属性。
  • 你能给我一个例子或链接吗
  • 我会用一个例子来添加答案。

标签: javascript object notation object-literal


【解决方案1】:

对象初始值设定项中的属性名称必须是常量。但是,您可以向对象添加属性并动态创建名称:

var events = {
            addEvent: function(element, type, fn, capture){
                 element.addEventListener(type, fn, capture);
            },
            removeEvent: function(){
                 element.removeEventListener(type, fn, capture);
            }
       };

events[action + "Event"] = function() { /* ... */ };

【讨论】:

  • 你的意思是先创建一个空对象,然后用括号定义一个函数?
  • @CameronA 是的 - 您可以在创建对象后添加所需的所有属性。但是,在对象初始化器本身中,属性名称必须是常量。
  • EcmaScript 6 有一个叫做 Computed Property Name 的东西,它正是我要找的
  • @CameronA 是的,这是真的!在 ES6 中,事情更加灵活。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-02
  • 1970-01-01
  • 2016-01-17
相关资源
最近更新 更多