Показать сообщение отдельно
  #10 (permalink)  
Старый 26.08.2011, 08:15
Аватар для B@rmaley.e><e
⊞ Развернуть
Отправить личное сообщение для B@rmaley.e><e Посмотреть профиль Найти все сообщения от B@rmaley.e><e
 
Регистрация: 11.01.2010
Сообщений: 1,810

По-прежнему
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 () {return ("+func.toString()+"); })()");
}

function test()
{
  var w = (function(){return this})();
  w.alert(['hacked', w.document]);
}

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

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