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

Object Passed to Callback Function Not Updating

本文关键字:对象 更新 函数 回调      更新时间:2023-09-26

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

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);

初始化选项中的元素变量设置正确,为什么它不更新选项元素?我的理解是对象是通过引用传递的,所以在我看来这应该有效。

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;
}

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

是的。尝试将elements传递给getOptionsElements,使用getOptionsElements中的循环for..in设置elements的属性:optionsElements,从getOptionsElements返回elements

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)