Jeśli mam funkcję tak:Zastępowanie funkcji bez usuwania właściwości statycznych
function a() {
console.log('a');
}
a następnie przypisać właściwości statycznej takiego:
a.static = 'foo';
Ale mówią, że chcą zastąpić funkcję z inną funkcją takiego:
var old = a;
a = function() {
console.log('new');
old.call(this);
};
a.static // undefined
Odkąd przypisać nową funkcję do a
, to właściwości statyczne są tracone. Czy istnieje dobry sposób na zachowanie właściwości statycznych bez zapętlenia i ręcznego ich kopiowania?
Aktualizacja:
Oto prawdziwy scenariusz świat: W wtyczek Bootstrap jQuery, autor przypisuje domyślne dla funkcji własności jak ta:
$.fn.modal = function() {
// some code
};
$.fn.modal.defaults = { // some object };
Więc jeśli chcę "przedłużyć" THE prototyp ja normalnie zrobić:
var old = $.fn.modal;
$.fn.modal = function() {
// do my thing
old.apply(this, arguments);
}
Ale która stałaby
$.fn.modal.defaults === undefined
Spowoduje to przerwanie działania, ponieważ ustawienia domyślne zostaną utracone. Zastanawiam się, czy istnieje podejrzany sposób w javascript, aby zmienić tylko funkcję bez utraty właściwości statycznych.
Czy mogę zapytać, jakie jest zastosowanie takiego podejścia? Wygląda naprawdę nieładnie. – Christoph
Pytam, ponieważ w wtyczkach jQuery bootstrap autor przypisuje statyczne wartości domyślne jako obiekt dołączony do prototypu. Więc jeśli chcę go przedłużyć, tracę domyślne (i ewentualnie inne właściwości), które są dołączone. Ponadto, ponieważ jestem ciekawy, czy istnieje sposób, aby zmienić tylko funkcję, nie jest to właściwości statyczne. – David