2009-01-27 8 views
2

j'étais toujours curieux est-il possible de surcharger la fonction littérale, quelque chose comme vous pouvez le faire avec la fonction:fonction Javascript() littérale SURCHARGE

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

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

Bien sûr, vous pouvez deviner que c'est belle façon de tout le débogage projet. Cependant, tout effort que j'ai fait ici ne sert à rien.

Question pour vous des experts est:

  1. Peut-être il y a quelque chose que je ne sais pas, peut-être il y a possibilité de surcharger ce constructeur putain? (mais probablement pas).
  2. Si non alors - comment faire cela - si possible - dans n'importe quel navigateur (pas seulement en utilisant javascript - mais leur langue étendue - chaque navigateur a quelque chose comme ça).
  3. Si non alors - comment cela se fait à travers addon comme firebug ou etc ??

Répondre

1

Vous êtes terminologie est désactivée: Function() est la fonction constructeur, alors que function() {...} est une fonction littérale .

Et non, je ne pense pas qu'il existe une façon portable de faire cela, mais il pourrait y avoir pour les anciennes versions de Firefox: Si je me souviens bien, il était possible d'utiliser with() {...} pour masquer les fonctions constructeur intégrées et Firefox utiliserait les nouveaux même pour les littéraux.

Cela semble fonctionner plus:

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

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

with(overload) { 
    document.writeln(new Object().foo); 
    document.writeln({}.foo); 
}