【问题标题】:Javascript function() literal overloadingJavascript function() 文字重载
【发布时间】:2010-10-03 17:25:29
【问题描述】:

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

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. 如果不是那么 - 这是如何通过诸如 firebug 之类的 addOn 完成的??

【问题讨论】:

    标签: javascript constructor debugging overloading


    【解决方案1】:

    您的术语已关闭:Function() 是函数构造函数,而function() {...}函数文字

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

    这似乎不再起作用:

    var overload = {
        Object : function() {}
    };
    
    overload.Object.prototype.foo = 'bar';
    
    with(overload) {
        document.writeln(new Object().foo);
        document.writeln({}.foo);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-01
      • 2011-06-11
      • 2022-11-01
      • 1970-01-01
      • 2014-02-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多