Каким образом передаются аргументы из sum(1, 2)
в декоратор?
// вспомогательная функция для проверки на число
function checkNumber(value) {
return typeof value == 'number';
}
// декоратор, проверяющий типы для f
// второй аргумент checks - массив с функциями для проверки
function typeCheck(f, checks) {
return function() {
for (var i = 0; i < arguments.length; i++) {
if (!checks[i](arguments[i])) {
alert( "Некорректный тип аргумента номер " + i );
return;
}
}
return f.apply(this, arguments);
}
}
function sum(a, b) {
return a + b;
}
// обернём декоратор для проверки
sum = typeCheck(sum, [checkNumber, checkNumber]); // оба аргумента - числа
// пользуемся функцией как обычно
alert( sum(1, 2) ); // 3, все хорошо
По-моему переменные не передаются в декоратор. Декоратор возвращает(подсовывает) нам свою функцию, вместо оригинальной.
return function() {
for (var i = 0; i < arguments.length; i++) {
if (!checks[i](arguments[i])) {
alert( "Некорректный тип аргумента номер " + i );
return;
}
}
return f.apply(this, arguments);
}
Этот код выполняет наша функция со своими переменными и в конце вызывается уже оригинал. Ну и так как код получается, как бы выполняется в самой функции, то ему доступны параметры функции через объект arguments
.
Хотя тут главное понять принцип, как написать этот декоратор и что к параметрам функции можно обращаться через arguments
.
Можно ли, например, для метода getElementById, сократить область поиска со всей страницы до какой-либо отдельной части HTML-документа? В примере
Есть локальный сервер на Apache с PHP версии 7 но в списке сайтов есть некоторые написаные с версией 53 и из за того что некоторый функционал не работает...
На каждой странице в Sonata-admin появляется скролл, даже если страница помещается в экранПример скролла