Программеры, при инспекции кода ряда объектов написанных на JavaScript, которые должны быть reusable, было выявлено ряд функций, код которых дублируется с точностью до названий методов, т.е. вызываются разные методы одного объекта, данный код был квалифицирован как "пахнущий"(smell code) и предложено провести рефакторинг а ля "remove dublicate code", "путем вынесения указателя на функцию во входной параметр"(озвучено было в терминах языка Си)..т.е. заменить две похожих функции на одну, со входным параметром -указателем на функцию...проблема как реализовать идиому языка Си "указатель на функцию" с использованием синтаксиса javascript'a — первое, что приходит в голову, так это то, что javascript, можно в runtime переиницилизировать тело функции объекта, у какие еще есть проектные решения ?
Здравствуйте, TheHobbit, Вы писали:
TH>Программеры, при инспекции кода ряда объектов написанных на JavaScript, которые должны быть reusable, было выявлено ряд функций, код которых дублируется с точностью до названий методов, т.е. вызываются разные методы одного объекта, данный код был квалифицирован как "пахнущий"(smell code) и предложено провести рефакторинг а ля "remove dublicate code", "путем вынесения указателя на функцию во входной параметр"(озвучено было в терминах языка Си)..т.е. заменить две похожих функции на одну, со входным параметром -указателем на функцию...проблема как реализовать идиому языка Си "указатель на функцию" с использованием синтаксиса javascript'a — первое, что приходит в голову, так это то, что javascript, можно в runtime переиницилизировать тело функции объекта, у какие еще есть проектные решения ?
Не понял в чем проблема?
function a(c,d)
{
return d*c;
}
function b(c,d)
{
return c+d;
}
function calc(fname,c,d)
{
return fname(c,d);
}
alert(calc(a,2,3));
alert(calc(b,2,3));
Здравствуйте, TheHobbit, Вы писали:
TH>Программеры, при инспекции кода ряда объектов написанных на JavaScript, которые должны быть reusable, было выявлено ряд функций, код которых дублируется с точностью до названий методов, т.е. вызываются разные методы одного объекта, данный код был квалифицирован как "пахнущий"(smell code) и предложено провести рефакторинг а ля "remove dublicate code", "путем вынесения указателя на функцию во входной параметр"(озвучено было в терминах языка Си)..т.е. заменить две похожих функции на одну, со входным параметром -указателем на функцию...проблема как реализовать идиому языка Си "указатель на функцию" с использованием синтаксиса javascript'a — первое, что приходит в голову, так это то, что javascript, можно в runtime переиницилизировать тело функции объекта, у какие еще есть проектные решения ?
Ничего не понял
function f1(param)
{
alert("Фнукция 1\n" + param);
}
functon f2(param)
{
alert("Фнукция 2\n" + param);
}
function test(f, param)
{
f(param);
// или, что еще лучше, f.apply(this, new Array(param))
// таким образом с this передается контекст функции
}
test(f1, "параметр");
test(f2, "параметр");
Здравствуйте, TheHobbit, Вы писали:
TH>Программеры, при инспекции кода ряда объектов написанных на JavaScript, которые должны быть reusable, было выявлено ряд функций, код которых дублируется с точностью до названий методов, т.е. вызываются разные методы одного объекта, данный код был квалифицирован как "пахнущий"(smell code) и предложено провести рефакторинг а ля "remove dublicate code", "путем вынесения указателя на функцию во входной параметр"(озвучено было в терминах языка Си)..т.е. заменить две похожих функции на одну, со входным параметром -указателем на функцию...проблема как реализовать идиому языка Си "указатель на функцию" с использованием синтаксиса javascript'a — первое, что приходит в голову, так это то, что javascript, можно в runtime переиницилизировать тело функции объекта, у какие еще есть проектные решения ?
В JavaScript имя функции есть имя переменной содержащей указатель на тело функции, потому что функция — это объект.
Здравствуйте, DOOM, Вы писали:
DOO>Здравствуйте, TheHobbit, Вы писали:
TH>>Программеры, при инспекции кода ряда объектов написанных на JavaScript, которые должны быть reusable, было выявлено ряд функций, код которых дублируется с точностью до названий методов, т.е. вызываются разные методы одного объекта, данный код был квалифицирован как "пахнущий"(smell code) и предложено провести рефакторинг а ля "remove dublicate code", "путем вынесения указателя на функцию во входной параметр"(озвучено было в терминах языка Си)..т.е. заменить две похожих функции на одну, со входным параметром -указателем на функцию...проблема как реализовать идиому языка Си "указатель на функцию" с использованием синтаксиса javascript'a — первое, что приходит в голову, так это то, что javascript, можно в runtime переиницилизировать тело функции объекта, у какие еще есть проектные решения ?
DOO>Не понял в чем проблема?
Здравствуйте, Mamut, Вы писали:
M>Здравствуйте, TheHobbit, Вы писали:
TH>>Программеры, при инспекции кода ряда объектов написанных на JavaScript, которые должны быть reusable, было выявлено ряд функций, код которых дублируется с точностью до названий методов, т.е. вызываются разные методы одного объекта, данный код был квалифицирован как "пахнущий"(smell code) и предложено провести рефакторинг а ля "remove dublicate code", "путем вынесения указателя на функцию во входной параметр"(озвучено было в терминах языка Си)..т.е. заменить две похожих функции на одну, со входным параметром -указателем на функцию...проблема как реализовать идиому языка Си "указатель на функцию" с использованием синтаксиса javascript'a — первое, что приходит в голову, так это то, что javascript, можно в runtime переиницилизировать тело функции объекта, у какие еще есть проектные решения ?
M>Ничего не понял
M>
M>function f1(param)
M>{
M> alert("Фнукция 1\n" + param);
M>}
M>functon f2(param)
M>{
M> alert("Фнукция 2\n" + param);
M>}
M>function test(f, param)
M>{
M> f(param);
M> // или, что еще лучше, f.apply(this, new Array(param))
M> // таким образом с this передается контекст функции
M>}
M>test(f1, "параметр");
M>test(f2, "параметр");
M>
Здравствуйте, anonymous, Вы писали:
A>Здравствуйте, TheHobbit, Вы писали:
TH>>Программеры, при инспекции кода ряда объектов написанных на JavaScript, которые должны быть reusable, было выявлено ряд функций, код которых дублируется с точностью до названий методов, т.е. вызываются разные методы одного объекта, данный код был квалифицирован как "пахнущий"(smell code) и предложено провести рефакторинг а ля "remove dublicate code", "путем вынесения указателя на функцию во входной параметр"(озвучено было в терминах языка Си)..т.е. заменить две похожих функции на одну, со входным параметром -указателем на функцию...проблема как реализовать идиому языка Си "указатель на функцию" с использованием синтаксиса javascript'a — первое, что приходит в голову, так это то, что javascript, можно в runtime переиницилизировать тело функции объекта, у какие еще есть проектные решения ?
A>В JavaScript имя функции есть имя переменной содержащей указатель на тело функции, потому что функция — это объект.