Wenn ich eine Funktion wie dieses:Aufschalten einer Funktion, ohne entfernen statische Eigenschaften
function a() {
console.log('a');
}
und dann eine statische Eigenschaft wie folgt vergeben:
a.static = 'foo';
aber sagen, dass ich die Funktion außer Kraft setzen wollen mit eine andere Funktion wie folgt aus:
var old = a;
a = function() {
console.log('new');
old.call(this);
};
a.static // undefined
Da ich eine neue Funktion a
zugewiesen, es ist statische Eigenschaften sind verloren. Gibt es eine gute Möglichkeit, die statischen Eigenschaften beizubehalten, ohne sie zu kopieren und manuell zu kopieren?
Update:
Hier ist eine reale Welt Szenario: In Bootstrap jQuery-Plugins, der Autor weist standardmäßig auf die Eigenschaftsfunktion wie folgt aus:
$.fn.modal = function() {
// some code
};
$.fn.modal.defaults = { // some object };
Also, wenn ich will die "verlängern" Prototyp würde ich normalerweise tun:
var old = $.fn.modal;
$.fn.modal = function() {
// do my thing
old.apply(this, arguments);
}
Aber das würde
$.fn.modal.defaults === undefined
Dies unterbricht die Funktionalität, da die Standardwerte verloren gehen. Ich frage mich, ob es eine hinterhältige Art und Weise in Javascript ändern nur die Funktion ohne die statischen Eigenschaften zu verlieren.
Darf ich fragen, was die Verwendung eines solchen Ansatzes ist? Es sieht wirklich chaotisch aus. – Christoph
Ich frage, weil in Bootstrap jQuery-Plugins der Autor statische Vorgaben als ein Objekt an den Prototyp angehängt. Also, wenn ich es erweitern möchte, verliere ich die Standardwerte (und möglicherweise andere Eigenschaften), die angehängt sind. Auch, weil ich neugierig bin, ob es eine Möglichkeit gibt, nur die Funktion zu ändern, nicht ihre statischen Eigenschaften. – David