2009-01-27 48 views
2

我總是好奇是否有可能重載函數文本,像您可以用函數來完成:JavaScript函數()字面超載

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像螢火蟲等?

回答

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); 
}