Вы можете заменить функции оболочками, которые вызывают оригинал, а также делают что-то еще.Например:
Object.keys(pen).forEach(name => {
const originalFunction = pen[name];
if (typeof originalFunction === "function") {
pen[name] = function(...args) {
console.log(name, args);
return originalFunction.apply(this, args);
};
}
});
Заменяет все функции на pen
(только свои, а не те, которые он наследует) на оболочки, которые сначала выполняют console.log
, а затем вызывают оригинал.
Пример:
var Pen = function(){
this.inkColor = 'red';
this.write = function(text){
// used console.log instead of document.write
console.log(text);
}
this.refill = function(){
console.log('refilling');
}
this.getInkColor = function(){
return this.inkColor;
}
};
var pen = new Pen();
Object.keys(pen).forEach(name => {
const originalFunction = pen[name];
if (typeof originalFunction === "function") {
pen[name] = function(...args) {
console.log(name, args);
return originalFunction.apply(this, args);
};
}
});
pen.write(pen.getInkColor() + ': Hello');
Вы можете настроить его для обработки функций, унаследованных от прототипа или унаследованных только от Pen.prototype
(в настоящее время у вас нет ничего на Pen.prototype
) и т. Д..