Remplacer la fonction (par exemple, “alerte”) et appeler la fonction d'origine?
Je voudrais remplacer un Javascript intégré dans la fonction avec une nouvelle version qui appelle l'original (de la même manière à la redéfinition d'une méthode d'une classe avec une version qui appelle super
dans de nombreuses langues). Comment puis-je faire cela?
Par exemple...
window.alert = function(str) {
//do something additional
if(console) console.log(str);
//super.alert(str) //How do I do this bit?
}
- Un semblable, mais un peu plus complexe cas: stackoverflow.com/questions/296667/...
- Montre primordial d'alerte: stackoverflow.com/questions/1729501/javascript-overriding-alert
- J'ai enlevé le "OO" et "super-classe" balises parce qu'ils ne s'appliquent pas. Mais cette question couvre moqueur "super" en JavaScript: stackoverflow.com/questions/6885404/javascript-override-methods
Vous devez vous connecter pour publier un commentaire.
Stocker une référence à la fonction d'origine dans une variable:
Le moyen universel est
<original_func_reference>.appliquer(ce qui, arguments)
- afin De préserver le contexte et passer tous les arguments. Généralement, la valeur de retour de la méthode d'origine doivent également être retournés.Cependant, il est connu que la
alert
est une fonction void, prend un seul argument, et ne pas utiliser lethis
objet. Donc,_alert(str)
est suffisante dans ce cas.Remarque: IE <= 8 renvoie une erreur si vous essayez de remplacer
alert
, alors assurez-vous que vous utilisezwindow.alert = ...
au lieu dealert = ...
.apply
.window.alert
, sauf pour IE <= 8. Avant IE 9, une erreur est renvoyée lorsque vous essayez de remplaceralert
.confirm
,document
, ... Si vous voulez intercepterwindow.alert
appels, vous pouvez placer le code dans une clôture où une coutumewindow
(oualert
) de la variable est déclarée et définie. Ce sera toujours fonctionner si votre application ne repose pas sur l'implicite de la déclaration de la variable.alert = ....
. Cela déclenche une erreur. Mais si vous utilisezwindow.alert = ...
, puis tout fonctionne comme prévu.Il n'y a pas de "super". De toute façon, créer une fermeture pour "garder" autour de la fonction d'origine-objet.
Note de "l'auto en invoquant la fonction" qui renvoie une nouvelle fonction-objet (qui est affecté à la
window.alert
de la propriété). La nouvelle fonction-objet renvoyé crée une clôture autour de la variableoriginal
qui évalue la valeur dewindow.alert
qui a été passé à "l'auto-invocation de la fonction".Cependant, je croire certains navigateurs peuvent empêcher
alert
et d'autres built-ins d'être modifiée...Heureux de codage.
Je suis en supposant que votre question est de savoir comment remplacer un haut-et être encore capable de l'appeler. Tout d'abord comme un avertissement, vous ne devriez jamais remplacer construit ins, sauf si vous avez une bonne raison de le faire puisqu'il sera impossible de debug/test.
C'est comment vous feriez:
Comment faire simple classique héritage en Javascript:
Comment remplacer les fonctions:
La fonction override est créé comme ceci:
Travaille avec plusieurs arguments.
Échoue lorsque vous essayez de remplacer indéfini ou nonfunctions.
Fait "superFunction" un "réservés", le mot 🙂
JavaScript ne pas utiliser un classique modèle d'héritage. Il y a une belle l'article ici qui décrit une façon d'écrire vos classes, de sorte qu'une syntaxe similaire peut être utilisé, mais il n'est pas pris en charge nativement.