После перечитывания вашего вопроса несколько раз, я думаю, вы имеете в виду:
document.getElementById("formInputBodySize").addEventListener("input", fBodySize);
let arrBodySize = [];
function fBodySize() {
let size = this.value;
size = isNaN(size) || size.trim()==""? 0: +size; // make it number
if (size) {
arrBodySize.push(size);
document.getElementById('titleWeight').innerText = size+10;
}
else document.getElementById('titleWeight').innerText = "";
}
Body size:<input type="text" id="formInputBodySize" /> Title weight: <span id="titleWeight"></span>
Посмотрите на плагин jQuery's AOP . В общем, Google "Javascript аспектно-ориентированного программирования".
Может быть, не красиво, но, похоже, работает ...
<script>
function A(x) { alert(x); return x; }
function B() { alert(123); }
function addHook(functionB, functionA, parent)
{
if (typeof parent == 'undefined')
parent = window;
for (var i in parent)
{
if (parent[i] === functionA)
{
parent[i] = function()
{
functionB();
return functionA.apply(this, arguments)
}
break;
}
}
}
addHook(B, A);
A(2);
</script>
Этот ответ не является окончательным, а скорее демонстрирует другую технику, чем предложенная до сих пор. Это использует тот факт, что функция в Javascript является объектом первого класса, и, как таковой, а) вы можете передать его как значение другой функции и б) вы можете добавить свойства к нему. Объедините эти черты со встроенными в функцию методами «вызова» (или «применения»), и вы сами начнете искать решение.
var function_itself = function() {
alert('in function itself');
}
function_itself.PRE_PROCESS = function() {
alert('in pre_process');
}
function_itself.POST_PROCESS = function() {
alert('in post_process');
}
var function_processor = function(func) {
if (func.PRE_PROCESS) {
func.PRE_PROCESS.call();
}
func.call();
if (func.POST_PROCESS) {
func.POST_PROCESS.call();
}
}