нужна задача, чтобы попрактиковаться))
изучил 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, время: 10:49. |