[Homework] JS OOP - Functions And Function Expressions
Моите решения на домашното "Functions And Function Expressions" по JavaScript OOP:
_4_PrintingModule.js - Edited
Поздрави,
Димитър!
Моите решения на домашното "Functions And Function Expressions" по JavaScript OOP:
_4_PrintingModule.js - Edited
Поздрави,
Димитър!
Ето и моите решения:
Очаквам всякаква критика.
Ето и от мен малко решения - ще се старая и занапред да ги споделям по-рано, за да отговарям на въпроси и да обсъждаме добрите практики. Разбира се, ако имате забележки - приемам и тях : )
1. Function-Playground - GitHub
Използвала съм два вградени модула в Node.js за удобство - 'utils' за форматирането на стринговете и 'os' за новите редове, защото в linux/windows новият ред е различен символ в конзолата (и да - стартирайте решението с node.js). Иначе самото решение не е абсолютно нищо интересно, дори не съм се заигравала със скоуповете - смятам, че ги знам и разбирам добре. И без това задачата беше доста досадна и ми отне доста време да измисля какво да правя.
2. DOM-Traversal - GitHub
Максимално кратко и семпло. Може би не е най-елегантното решение де. Сигурно има и по-хитър начин за вземането на класовете и id-тата на елементите, но това е решението, до което стигнах. Забележете използването на .forEach как е направено - смятам, че това е най-правилният начин.
3. DOM Manipulation - GitHub
4. Console Module - GitHub
Както правилно са забелязали колегите по-горе - в тази задача има само две неща реално за вършене: принтиране на "каквото е", или замяна на placeHolder-ите със следващите елементи в масива, без значение дали е 'Message', 'Error' или 'Warning'. Така, на всеки метод връщаме резултата от writeLine функцията. Мисля, че крайният резултат е доста изчистен и семпъл. Само, че се заиграх да си пиша тестове на тази задача сега, затова третата... няма да я кача скоро :D
Много ми хареса как си направила заместването в ConsoleModule. Само една забележка към всички домашни по-горе: сигурно ако се подадат по-малко на брой аргументи, отколкото са плейсхолдерите, клиентът няма да е доволен да види {1} (напр.) в изхода си. Мисля, че е редно да се провери за такова несъответствие и да се хвърля грешка.
И една малка закачка - препоръка: Пробвайте да изписвате writeError и writeWarning с различен цвят на конзолата. При мен се получи доста красиво ;)
ПС. Относно вземането на ID та и класове при мен работи чудесно така: if(element.id){...} и за класа: if(node.classList.length>0) {...}
О, да. Благодаря за забележката. Минаха ми тези неща като идеи докато писах - да проверявам дали броя на placeholder-ите е същия като аргументите за тях ии да показвам цветно съобщенията, но те не са основното за сега :) Ще споделиш ли твоите решения или си притеснен заради случилото се на предния курс?
Ще споделям решенията си след изтичането на срока за предаване, защото ми омръзна да проверявам собствените си решения.
Освен това ще проверявам домашни само тук във форума в знак на протест срещу неработещата система за проверяване.
Митко в четвърта задача не си изпълнил напълно условието на задачата. И по-точно ето тази точка:
Също така според мен трябва за съответните методи да използваш console.error() и console.warn().
А относно 2 и 3 задача виж как съм я направил и ще си отговориш на въпросите.
Ето и моя вариант на домашното
P.S. Употребявай разумно. Преписването е вредно за вашето обучение.
Споделям недоволството на Тито, но смятам, че има хора които имат нужда от нашите решения. Нямам предвид откровенните преписвачи. Аз в знак на протест срещу преписвачите реших да слагам предупредителни надписи, както на опаковките на цигарите.
Благодаря за забележката, Цецо!
Ще си оправя решението на 4та и ще напиша 2ра и 3та!
Поздрави!
Може ли някой да ми обясни защо ми ги дава всичките, че са тип стринг, а си подавам числа ?
function printCountAndTypeOFMyArguments() {
console.log("arguments length:" + arguments.length);
for (var argument in arguments) {
console.log(typeof argument);
}
}
printCountAndTypeOFMyArguments.call(null, 1, 2, 3, 4, 5);
printCountAndTypeOFMyArguments.apply(null, [1, 2, 3, 4, 5]);
Обясних си, в JavaScript forecha ходи по ключовете, не по стойностите, а arguments е масив.
Заповядай една алтернативна възможност:
function printCountAndTypeOFMyArguments() {
console.log("arguments length:" + arguments.length);
var arrArguments = [];
for(var i = 0; i < arguments.length; i++) {
arrArguments[i] = arguments[i];
}
arrArguments.forEach(function(argument) {
console.log(typeof argument);
});
}
printCountAndTypeOFMyArguments.call(null, 1, 2, 3, 4, 5);
printCountAndTypeOFMyArguments.apply(null, [1, 2, 3, 4, 5]);
1. Правим обекта arguments на масив (arrArguments), понеже обекта няма forEach.
2. Обхождаме новополученият масив с forEach(function(item) {
...
});
Поздрави,
Димитър!
Може ли малко помощ с това как да си тествам кода за втроа и трета задача, дали работи върху index.html файла. Трябва ли да пиша скрипта, после да го вкарвам в html файла и да гледам дали работи през някой експлорер или някаква друга магия се прави :). Благодаря предварително.
Няма магия, просто си инклудваш js файла в index.html, отваряш го в браузъра и тестваш с различни селектори.
Сигурно са минали 2 века от последния път когато споделих моите решения на което и да е домашно. Та да се включа и аз този път пускам домашното си за разглеждане.
Малко трудно ми беше да запаля пак за какво иде реч в JS понеже не съм го пипал последните 3 месеца и за това повзаимствах малко от тук-там, за което се извинявам предварително. Въпреки това решенията са изцяло адаптиране от моя гледна точка как бих ги решил :)
С риск да стана за смях, моля за помощ. Правя си node.js проект в Netbeans или VS, няма значение (като ударих на камък пробвах и с HTML проект, пак не става). Слагам там index.html файла. Правя нов DOMTraversal.js файл. В индекс файла слагам скрипт с път към DOMTraversal.js. файла.
Сега, ако в DOMTraversal.js напиша например console.log('Hi'), когато си отворя индекс файла и натисна ф12, на конзолата пише hi, тоест - вързани са. Когато обаче в DOMTraversal започна да си решавам задачата, не намира никой елемент със съответното id (ако ползвам getElementById) или със съответния селектор (ако ползвам querySelector). В крайна сметка, реших да пробвам да пейстна директно някое от решенията тук в моя .js файл, например това на Юлия (вади ми ерор в конзолата на браузъра "Uncaught TypeError: Cannot read property 'nodeName' of null "), или това на Kibork (вади празна конзола).
Ако пейстна обаче решението на Юлия или Киборк в самата конзола на браузъра ми, в нея си се изписва очакваният от задачата output.
Не знам дали го обясних достатъчно добре...
Предварително благодаря за отговорите.
Сигурен съм, че си си сложила <script> тага още в <head>а и търсиш елемент още преди да се е заредила страницата. Пробвай да го преместиш преди затварящия таг на бодито!
Тито, съжалявам, че няма емотиконка, която да изобрази състоянието ми в момента! Много ти благодаря за отговора, това е бил проблемът, който ми загуби цяла вечер, отивам да се самоубивам... ;)
Ето и моите решения. Признавам си, за втора ми трябваше малко помощ докато разбера, че може да се реши рекурсивно. :)
Личи си, че те бива с операциите за стрингове :) Заимствах малко от тях за последната задачка в моето решение, но за втората си се престарал - половината написан код може да се замени с:
"var element = document.querySelector(selector);"
: )
Нарочно съм го направил без document.querySelector(selector), защото идеята ми е ако намери повече елементи да вземе този, който има childs, вместо първия срещнат.
Хм, и все пак - тогава може да се вземат всички с "querySelectorAll" и после да се види кой има childs : )