нужна задача, чтобы попрактиковаться))
изучил js от начала до конца по двум книжкам (Фленаган. Подробное руководство, Дунаев. Самоучитель по JavaScript) и по вашему сайту.
задайте какуюнибудь задачу чтобы проверить че понял - че нет. (только 1. не надо плиз сверх заумных, т.к. еще без практики => получайник + 2. не надо говорить: напиши такую-то игру, эт будет левел апом (ну это тоже к первому) + 3. не надо писать типа заходи и на форум читай темы и пытайся решать реальные задачи - не тупой, пробовал уже, фигово получается). Заранее благодарен!:) |
Вот в этой теме парень тоже просил задачек для практики.
Смотри, выбирай. |
это я и был, просто там про создание Игры - а мне это еще не посилам
|
Понятно )), я вот до сих пор мучаю редактор-рисовалку.
|
Реализация jQuery.live на чистом JS.
|
сделать универсальную коллекцию, которая делегирует исполнение методов всем членам коллекции по очереди.
пример использования: var square= new Square( 1, 2, 3 ) var circle= new Circle( 1, 2, 3 ) var shapeList= new Collection( square, circle ) shapeList.setColor( 'red' ) sahpeList.draw() // то же что: // square.setColor( 'red' ) // circle.setColor( 'red' ) // square.draw() // circle.draw() |
Решить это:
var func = usrFunc(1)(2)(3)(4)(5); var sum = function (p1, p2) { return p1 + p2; }; var multiply = function (p1, 2) { return p1 * p2; }; func(sum); должно вернуть 15 func(multiply); должно вернуть 120 Собственно, нужно реализовать функцию usrFunc |
Цитата:
|
простая и быстрая задачка
вместо условия пишу код с комментами. и да, функция одна var a = myFunc(); // вернет "hello" var b = myFunc(); // вернет "wtf" |
Цитата:
Это легко делается при помощи самоопределяемой функции. |
Цитата:
|
Цитата:
function foo() { var i = 0; foo = function() { return ['Hello', 'World'][i++]; } return foo(); } alert([foo(), foo()].join(' ')); |
Цитата:
|
Цитата:
|
Вот решение который мне отправил melky:
myFunc = function(){ myFunc = function(){ return "wtf"; } return "hello"; } alert(myFunc()); alert(myFunc()); По моему очень просто, не каждый новичёк, глядя на этот код поймёт, почему он вообще так работает) |
Цитата:
Я к примеру тоже решил этот пример как советует Стоян Стефанов в своей книге «JavaScript шаблоны» var myFunc = function () { myFunc = function () { return "wtf"; }; return "hello"; }; |
Можно и не переопределять функцию:
function myFunc() { return ["wtf", "hello"][myFunc.i ^= 1]; } alert([myFunc(), myFunc()]) |
Цитата:
function foo() { var i = 0; foo = function() { return ['a', 'b', 'c', 'd'][i++]; } return foo(); } alert([ foo(), foo(), foo(), foo() ]); Цитата:
|
Тогда можно даже так:
var data = [22,33,44,88,99]; function test(){ alert(data[0]); data.shift(); } test(); test(); test(); test(); Вообще без зацикливания |
Лично я бы сделал примерно так:
function foo(){ if( !foo.values ) foo.values = []; if( arguments.length === 0 ) return foo.values.shift(); foo.values.push.apply( foo.values, arguments ); return foo; }; foo( "Hello", "wtf" ); alert( [ foo(), foo() ].join( " " ) );Динамики хоть отбавляй:D |
Тогда я так:
function test(){ var data = [22,33,44]; var temp = data[0]; data.shift(); return temp; } alert(test()); alert(test()); alert(test()); |
Цитата:
Но в контексте данной поставленной задачи Вам бы так же следовало подумать головой, Ваша функция создает лишнюю переменную и массив. |
Цитата:
И Magneto, не нужно воспринимать мое высказывание так близко к сердцу, я не пытался вас задеть, просто сказать, что способов решения задач может быть несколько и не нужно себя в этом ограничивать ;) |
По-моему, проблема в условии задачи:) Непонятно, что нужно. Если функция должна при первом вызове возвращать одно, а при остальных - другое, тогда подойдет такое решение. Если решение аля стек, то это. Если переключатель, то это. Так что все зависит от назначения функции (+ "сколько людей, столько и мнений":) ).
|
обсуждения на 3 страницы как реализовать бесполезную функцию.. да какая разница как её реализовывать? вообще, это беда многих мануалов - отсутствие жизненных примеров. синтетические примеры за простотой формулировки скрывают отсутствие требований. а без требований невозможно рассуждать о том, какое решение лучше подходит.
|
Цитата:
Цитата:
P.S. понравился пример от Octane, красиво уложено |
вот и хорошо. нефиг говнокодить на практике.
|
В тему о бесполезных задачах))
Заставить этот код выдавать "Hello world!": for(key in []) {alert (key + [][key])} |
|
Цитата:
Array.prototype.Hello = " world!" |
вспомнилась зачада с яндекса, которая поставила тогда меня в тупик
что вернёт функция? (function f() { function f() { return 1 } return f(); function f() { return 2 } })(); |
По-моему, задача не представляет сложности, если знать различия Function Declaration и Function Expression.
|
Вот вам реальная простенькая задачка, которая недавно возникла.
Реализовать функцию getWords(id), которая: 1. принимает в качестве аргумента строку css селектора (для простоты просто id dom элемента); 2. возвращает массив слов содержащихся внутри этого элемента, в том числе и в дочерних. Достаточно просто, но прикольно для начинающих. Тут и немного работы с dom, и в целом полезно. |
Мой вариант реализации самоопределяемой функции:
var displayName = (function() { function func() { alert('First name'); func = function() { alert('Second name'); }; } return function() { func(); }; })(); displayName(); displayName(); // Более удобный вариант function memoize(init, main) { function current() { init.apply(null, arguments); current = main; } return function() { current.apply(null, arguments); }; } var displayName = memoize(function() {alert('First name');}, function() { alert('Second name');}); displayName(); displayName(); |
сейчас пришла в голову ещё одна задачка. мне кажется, она будет зубодробительной :)
я сам то её решил. и да... работать эта задачка будет только в FF (версия - хз, свежая). итак, вот код с комментами, вместо условия. как сделать так, чтобы .... <div id=a>0</div> <script> a=document.getElementById('a'); /* тут пропущенный кусок моего кода */ // всё хорошо. при клике к содержимому // будет добавляться буква 'abc' // всё статично a.onclick = function(){ a.innerHTML += 'abc' }; </script> ... чтобы при клике по div к его innerHTML прибавлялись не 'abc', а 'ABC' ? |
в самом конце :)
а код нельзя менять. только дописать свой кусок. местонахождение определено комментами /**/ |
Цитата:
<div id=a>0</div> <script> a=document.getElementById('a'); /* тут пропущенный кусок моего кода */ (function(){ var cached = a.innerHTML; a.__defineGetter__('innerHTML', function(){ return cached; }); a.__defineSetter__('innerHTML', function(b){ cached = b.toUpperCase(); var div = document.createElement('div'); div.innerHTML = cached; for(var i = 0, length = a.childNodes.length; i < length; ++i){ a.removeChild(a.childNodes[i]); } for(var i = 0, length = div.childNodes.length; i < length; ++i){ a.appendChild(div.childNodes[i]); } }); })(); // всё хорошо. при клике к содержимому // будет добавляться буква 'abc' // всё статично a.onclick = function(){ a.innerHTML += 'abc' }; </script> |
Цитата:
Но то что melky, заявил тока про FF я тоже улыбнулся, геттеры и сеттеры давно поддерживаются и другими... Кроме любимого ИЕ =) |
devote, специально скрыл, желающие потом смогут посмотреть решение. Ну и оно для всех нормальных браузеров, а не только FF.
Цитата:
|
Цитата:
|
Часовой пояс GMT +3, время: 15:16. |