- PVSM.RU - https://www.pvsm.ru -
Перед выполнением каких либо действий над элементами их сначала требуется найти, например:
function show() {
var block = $( this );
var input = block.find( 'input' );
var elem = block.find( '.elem' );
input.val( 1 );
elem.slideDown();
}
function hide() {
var block = $( this );
var input = block.find( 'input' );
var elem = block.find( '.elem' );
input.val( 0 );
elem.slideUp();
}
Как вы уже наверное заметили у этих функции есть общий код, который хотелось бы вынести. Есть несколько способов сделать это, но я решил изобрести велосипед.
function base() {
var block = $( this );
var input = block.find( 'input' );
var elem = block.find( '.elem' );
}
show = concatf( base, function() {
input.val( 1 );
elem.slideDown();
} );
hide = concatf( base, function() {
input.val( 0 );
elem.slideUp();
} );
Ну и собственно реализация функции concatf:
var concatf = ( function() {
function r( f ) {
return f.toString().replace( /^[^{]+{/, '' ).replace( /[^}]}$/, '' );
}
return function( f1, f2 ) {
return new Function( f2.toString().match( /(([^)]*))/ )[ 1 ].replace( /s/g, '' ), r( f1 ) + r( f2 ) );
}
} () );
В данной реализации есть большой минус, это потеря замыкания.
Эту проблему можно решить, но больно не красиво, поэтому приводить реализацию не буду.
Автор: tramak
Источник [1]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/javascript/37195
Ссылки в тексте:
[1] Источник: http://habrahabr.ru/post/184368/
Нажмите здесь для печати.