如果我有这样的功能:
function a() {
console.log('a');
}
然后分配这样的静态属性:
a.static = 'foo';
但说我要重写,像这样的另一功能的功能:
var old = a;
a = function() {
console.log('new');
old.call(this);
};
a.static // undefined
因为我分配了一个新的功能,以a
,它的静态属性都将丢失。 有一个整洁的方式来保持静态属性,而无需循环和手动复制?
更新:
这里有一个真实的场景:在引导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偷偷摸摸只改变功能不失静态属性。