如果我有这样的功能:
function a() {
console.log('a');
}
然后像这样分配一个静态属性:
a.static = 'foo';
但是说我想用另一个这样的函数覆盖这个函数:
var old = a;
a = function() {
console.log('new');
old.call(this);
};
a.static // undefined
由于我为 分配了一个新函数a
,因此它的静态属性丢失了。有没有一种巧妙的方法来保持静态属性而不循环和手动复制它们?
更新:
这是一个真实的场景:在 Bootstrap jQuery 插件中,作者将默认值分配给属性函数,如下所示:
$.fn.modal = function() {
// some code
};
$.fn.modal.defaults = { // some object };
因此,如果我想“扩展”原型,我通常会这样做:
var old = $.fn.modal;
$.fn.modal = function() {
// do my thing
old.apply(this, arguments);
}
但这会让
$.fn.modal.defaults === undefined
这会破坏功能,因为默认值会丢失。我想知道 javascript 中是否有一种偷偷摸摸的方式来仅更改函数 而不会丢失静态属性。