Javascript function () перегрузка литералов - PullRequest
2 голосов
/ 27 января 2009

Мне всегда было любопытно, есть ли возможность перегрузить литерал функции, что-то вроде того, что вы можете сделать с помощью функции:

var test=Function;
Function=function(arg)
{
      alert('test');
      return test(arg);
}

var b=Function("alert('a')");
var c=Function("alert('x')");
b();
c();

Конечно, вы можете догадаться, что это хороший способ отладки всего проекта. Однако любое усилие, которое я приложил здесь, ни к чему не приводит.

Вопрос к вам, эксперты:

  1. Может быть, есть что-то, чего я не знаю, может быть, есть возможность перегрузить этот чертов конструктор? (но, вероятно, нет).
  2. Если нет, то - как это сделать - если это возможно - в любом из браузеров (не только с помощью javascript - но и с их расширенным языком - каждый браузер получил что-то подобное).
  3. Если нет, то как это сделать с помощью addOn, например, firebug и т. Д. ??

1 Ответ

1 голос
/ 27 января 2009

Ваша терминология отключена: Function() - это функция конструктор , тогда как function() {...} - это литерал функции .

И нет, я не думаю, что есть портативный способ сделать это, но может быть для старых версий Firefox: если я правильно помню, когда-то можно было использовать with() {...}, чтобы скрыть встроенный конструктор функции и Firefox будут использовать новые даже для литералов.

Кажется, это больше не работает:

var overload = {
    Object : function() {}
};

overload.Object.prototype.foo = 'bar';

with(overload) {
    document.writeln(new Object().foo);
    document.writeln({}.foo);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...