オブジェクトを取り、そのオブジェクトのコードがウィンドウを参照するのを防ぐことができるサンドボックス モジュールを作成しようとしています。
これが概念的にどのように機能するかです。
var sand = function(window) {
var module = {
say: function() {
console.log(window.location);
}
};
return module;
}
sand({}).say(); // window.location is undefine
オブジェクトがパスインの場合、これは機能しません
var $sand = (function(){
return function(obj, context) {
return (function(obj, window) {
window.module = {};
// doesn't work even copy object
for (p in obj) {
window.module[p] = obj[p];
}
console.log(window.location); // undefine
return window.module;
}(obj, context));
};
}());
var module = {
say: function() {
console.log(window.location);
}
};
$sand(module, {}).say(); // still reference to window.location
このパターンを機能させるにはどうすればよいですか?