将属性动态分配给 JS 对象

Posted

技术标签:

【中文标题】将属性动态分配给 JS 对象【英文标题】:Dynamically assign properties to a JS object 【发布时间】:2012-10-18 10:16:56 【问题描述】:

我需要为一个 js 对象动态添加属性,这是我通过 eval() 实现的:

$ ->

  #Methods
  window.add_address = (attributes, id=new Date().getTime())->
    $container = $('ul#addresses_list')
    $unit = $('<li>')

    $.each attributes, (key,value)->
      $input = $('<input type="hidden">')
      $input.attr 'name', "contact[addresses_attributes][#id][#key]"
      $input.val value
      $unit.append $input

    $container.append $unit

  #Events

  #Add address button
  $('a#add_address').on 'click', (ev)->
    attributes =  new Object
    $('#address_fields').find('input').each ->
      eval("attributes.#$(this).attr 'id'='#$(this).val()'");

    add_address attributes

这很完美,但我觉得 eval() 很尴尬,有没有办法“更漂亮”?我的意思是,我搜索了像 Jquery .serializeArray() 这样的替代品,但它似乎有效仅使用查询表单,我需要从该#address_fields div 获取输入。

【问题讨论】:

【参考方案1】:

使用object['key'] 表示法

attributes[$(this).attr('id')] = $(this).val();

使用以下方法创建对象也非常有效:

var attributes=;

编辑:类似的行可以用相同的符号编写 jquery 方法

   attributes[$(this)['attr']('id')] = $(this)['val']();

【讨论】:

正是我想要的。这几乎让我对新手问题感到难过。谢谢!

以上是关于将属性动态分配给 JS 对象的主要内容,如果未能解决你的问题,请参考以下文章

如何在 TypeScript 中为对象动态分配属性?

如何将相同的事件侦听器分配给 Vue.js 中动态创建的按钮并将对象的值作为参数传递给它?

Angular 2将动态类分配给元素

动态创建和分配对象属性打字稿

将控制器操作权限动态分配给 asp.net MVC 中的角色

在 WIX 中运行时为快捷方式动态分配名称