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

В 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 недоступен

Последний раз редактировалось B@rmaley.e><e, 26.08.2011 в 08:35.
Ответить с цитированием