将javascript属性添加到window对象失去了价值

时间:2015-05-05 21:14:09

标签: javascript

假设:

var wins = [];

function openWin(index, val) {
    wins[index] = window.open(...);
    wins[index].prop1 = val;         // add a custom property
    console.log(wins[index].prop1);  // prop1 is true here
}

function checkProp1(index) {
    // wins[index] is still a valid object but prop1 is undefined
    console.log(wins[index].prop1);
}

openWin(0, true);
checkProp1(0);

为什么一旦openWin()存在,“prop1”就会失去价值? 如何使关联的属性保持其值?

1 个答案:

答案 0 :(得分:1)

window.open返回窗口句柄,如果弹出窗口不起作用,则返回null。将窗口存储为另一个对象的属性可能更容易,并将其添加到缓存中。

为此,您可以采用以下形式



;
(function(ns) {
  ns.windowHandler = ns.windowHandler || {
    add: function(index, val) {
      var windowHandle = window.open(index, val),
        obj = {
          handle: windowHandle,
          prop1: index
        };
      if (typeof ns.windowHandler.windows === 'undefined') {
        ns.windowHandler.windows = [];
      }
      ns.windowHandler.windows.slice(index, 0, [obj]);
    },
    checkProp: function(index) {
      if (typeof ns.windowHandler.windows === 'undefined') {
        return;
      }
      return ns.windowHandler.windows[index].prop1;
    }
  }:
}(window));

window.windowHandler.add(0, true);
console.log(window.windowHandler.checkProp(0));




你可以找到一个小提琴here