Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как закрыть доступ к глобальному объекту window? (https://javascript.ru/forum/misc/21004-kak-zakryt-dostup-k-globalnomu-obektu-window.html)

m00 26.08.2011 08:17

Да ... как раз сейчас и думаю, что с этим можно сделать.

B@rmaley.e><e 26.08.2011 08:28

В strict mode this должен по-умолчанию быть равен undefined. Только with там запрещён
"use strict";

alert( (function(){return this})() )
В хромиуме (и, вроде как, FF5) оно уже работает, но в Опере ещё нет.

А ещё есть такая хитрость:
function create_isolated_closure(func)
{
  var global = (function(){return this;}).call(null);
  var undefined;

  // перекрываем абсолютно все что есть в global
  var scope = {};
  for(attr in global) {
	scope[attr] = undefined;
  }
  delete scope.alert; // оставляем доступ к alert(), чтобы тестировать функции
				
  with(scope)
	return eval("(function () { 'use strict'; return ("+func.toString()+"); })()");
}

function test()
{
  var w1 = (eval || eval)("this"),
        w2 = (function(){return this})();
  alert([w1, w2]);
}

var t = create_isolated_closure(test); // делаем изолированную копию функции

t.call({}); // вызов изолированной копии, DOM недоступен

m00 26.08.2011 08:59

Да, strict mode интересная штуковина, не знал. Спасибо.
По примеру, в хроме помогает и this undefined, а вот в ff 3.6 всё отлично.


Часовой пояс GMT +3, время: 13:18.