假设:
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”就会失去价值? 如何使关联的属性保持其值?
答案 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