动态地将属性分配给JS对象

nic*_*oga 3 javascript jquery json coffeescript

我需要动态地向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
Run Code Online (Sandbox Code Playgroud)

这完美的作品,但我觉得别扭用eval(),反正是有这样做"漂亮"?我的意思是,我搜索了像Jquery .serializeArray()这样的替代品,但它似乎只能用查询的形式工作,我需要从该#address_fieldsdiv 获取输入.

cha*_*tfl 8

使用object['key']符号

attributes[$(this).attr('id')] = $(this).val();
Run Code Online (Sandbox Code Playgroud)

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

var attributes={};
Run Code Online (Sandbox Code Playgroud)

编辑:沿着类似的行可以用相同的表示法编写jquery方法

   attributes[$(this)['attr']('id')] = $(this)['val']();
Run Code Online (Sandbox Code Playgroud)