Изменение прототипа функции
Здравствуйте!
Хочу переписать прототип функции так, чтобы при каждом вызове любой функции выполнялось какое либо действие. Например "console.log('hello!')". Я знаю что это делать нельзя и руки за это обрывают, но делаю это для себя просто чтобы лучше понимать как работают функции. Опытным путём набирая в консоли и гугля я наткнулся на то что все функции при вызове используют Function.prototype.call, и пришёл к выводу что его надо както дописать, но столкнулся с проблемой, что я не могу продолжить вызов call во время изменения прототипа и вместо того чтобы функция выполнялась и выводила надпись - все функции выводят надпись и больше ничего не делают. |
Функции в JavaScript – это объекты с внутренним методом [[Call]]. Это не одно и то же, что Function.prototype.call. Получить доступ к [[Call]] и как-то изменить его средствами JavaScript невозможно.
|
Да, это я знаю. я просто хотел попытаться встроить какой-то вызов перед каждым [[call]]
|
(function() {
var tmp = Function.prototype.call;
Function.prototype.call = function() {
console.log('hello');
tmp.apply(this, arguments);
}
})();
function test() {
alert(1);
}
test.call();
Вот так что ли? |
Ruslan_xDD,
Да, именно так! Я затупил и думал что функция будет передаваться ссылкой и изменение call перетрёт tmp :( |
Цитата:
Цитата:
Цитата:
|
Octane, он (Ruslan_xDD) просто не понял задумку)
Цитата:
Function.prototype.call = (function(method) {
return function() {
alert(1);
return method.apply(this, arguments);
};
}(Function.prototype.call));
function test() {}
test.call(); // 1
test(); //
Цитата:
function wrap(method) {
return function() {
alert('your code');
return method.apply(this, arguments);
};
}
console.log = wrap(console.log);
console.log(1);
|
Нерв ты не прав =).
|
Ruslan_xDD, переопределяет функцию Function.prototype.call на которую благоразумно сохранил ссылку. а ты переопределяешь уже свою функцию т.е. Function.prototype.call уже указывает на твою функцию а не на prototype.call
|
Цитата:
|
| Часовой пояс GMT +3, время: 01:19. |