传递给回调函数的对象未更新

时间:2016-01-24 00:31:28

标签: javascript

我有一个传递给函数的全局对象变量,然后我调用另一个函数并将该返回值赋给传递给原始函数的变量。此返回值不会传播到由于某种原因传递给函数的全局对象。

var DEFAULT_OPTIONS = {...}
var optionsElements = new Object();

function initializeOptions(elements, optionsObject, defaultOptions) {
  elements = getOptionsElements();

  optionsObject = loadOptions(elements, defaultOptions);

  document.getElementById("movie_categories").addEventListener("change", 
      function(event) {
    onCategoryChange(elements, event);
  });

  document.getElementById("tv_categories").addEventListener("change",
      function(event) {
    onCategoryChange(elements, event);
  });
}

initializeOptions(optionsElements, currentOptions, DEFAULT_OPTIONS);

initializeOptions中的元素var设置正确,为什么不更新optionsElements?我的理解是对象是通过引用传递的,所以在我看来这应该有效。

function getOptionsElements() {
  options =  {
    "all_movies": document.getElementById("all_movies"),
    "movie_3d": document.getElementById("movie_3d"),
    "movie_480p": document.getElementById("movie_480p"),
    "movie_bd-r": document.getElementById("movie_bd-r"),
    "movie_bd-rip": document.getElementById("movie_bd-rip"),
    "movie_cam": document.getElementById("movie_cam"),
    "movie_dvd-r": document.getElementById("movie_dvd-r"),
    "movie_hd-bluray": document.getElementById("movie_hd-bluray"),
    "movie_kids": document.getElementById("movie_kids"),
    "movie_mp4": document.getElementById("movie_mp4"),
    "movie_non-english": document.getElementById("movie_non-english"),
    "movie_packs": document.getElementById("movie_packs"),
    "movie_web-dl": document.getElementById("movie_web-dl"),
    "movie_xvid": document.getElementById("movie_xvid"),

    "all_tv": document.getElementById("all_tv"),
    "tv_documentaries": document.getElementById("tv_documentaries"),
    "tv_sports": document.getElementById("tv_sports"),
    "tv_480p": document.getElementById("tv_480p"),
    "tv_bd": document.getElementById("tv_bd"),
    "tv_dvd-r": document.getElementById("tv_dvd-r"),
    "tv_dvd-rip": document.getElementById("tv_dvd-rip"),
    "tv_mp4": document.getElementById("tv_mp4"),
    "tv_non-english": document.getElementById("tv_non-english"),
    "tv_packs": document.getElementById("tv_packs"),
    "tv_packs-non-english": document.getElementById("tv_packs-non-english"),
    "tv_sd-x264": document.getElementById("tv_sd-x264"),
    "tv_web-dl": document.getElementById("tv_web-dl"),
    "tv_x264": document.getElementById("tv_x264"),
    "tv_xvid": document.getElementById("tv_xvid"),

    "sort_options": document.getElementById("sort_options")
  }

  return options;
}

1 个答案:

答案 0 :(得分:1)

  

所以在我分配了elements = getOptionsElements后,元素不再存在   指向optionsElements,但现在是对象的引用   在getOptionsElements中创建?

是。尝试将elements传递给getOptionsElements,使用for..in中的getOptionsElements循环来设置elementsoptionsElements的属性,从elements返回getOptionsElements var optionsElements = new Object(); function initializeOptions(elements, optionsObject, defaultOptions) { elements = getOptionsElements(elements); return elements } function getOptionsElements(opts) { options = { "a":1, "b":2, "c":3 }; for (var prop in options) { opts[prop] = options[prop]; } return opts; }; console.log(initializeOptions(optionsElements), optionsElements)

print("\(piccount!)")