2

我一直很好奇是否有可能重载函数文字,就像你可以用函数做的那样:

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. 如果不是那么 - 这是如何通过像萤火虫等插件完成的?
4

1 回答 1

1

您的术语已关闭:Function()is the function constructor,而function() {...}is a function literal

不,我不认为有一种可移植的方式来做到这一点,但对于旧版本的 Firefox 可能有:如果我没记错的话,它曾经可以用来with() {...}隐藏内置的构造函数,而 Firefox 会使用即使是文字也有新的。

这似乎不再起作用:

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

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

with(overload) {
    document.writeln(new Object().foo);
    document.writeln({}.foo);
}
于 2009-01-27T09:55:58.250 回答