Jump to content

denis_alekss

User
  • Posts

    35
  • Joined

  • Last visited

Everything posted by denis_alekss

  1. Когда нужно его вообще использовать get/set?
  2. Решил понять смысл get/set, написал небольшой код, правильно ли в нем используется метод get/set или нужно по-другому, если по-другому, напишите пож. как лучше в моем коде. <script> class Beverage{ constructor(options){ this.name = options.name; } returnName() {console.log(this.name)} } class Price extends Beverage { constructor(options){ super(options) this.price = options.price; this.bos = options.bos; } result() {console.log("Напиток " + this.name + " Цена" + this.price + "Директор - " + this.bos)} get Bos(){ {return result()} } set Bos(newBos){ const newbos = newBos.split(' '); this.bos = newbos[0]; this.bos = newbos[1] } } const bev = new Beverage({name: 'Coca-cola'}) bev.returnName() const price = new Price({name: 'Fanta',price: " - 200 евро ",bos: "Стивен"}) price.result() price.bos = "Майкл Джексон" price.result() </script>
  3. fetch(url) возвращает объект промис, response это объект промис, который мы создаем в then и через него получаем доступ в json() чтобы вытащить этот url и в дальнейшем вывести ссылку https://jsonplaceholder.typicode.com/todos через консоль?
  4. Спасибо, хорошая ссылка с примерами. Я читал что первый параметр resolve если успешно второй если не успешно rejected. Тут просто используется вроде объекты первого класса тема? Глянем на этот код: function (r) { setTimeout((function () { r() } ) Я попробовал простой пример который не относится вообще к асинхронным функциям, вот ниже написал, просто этот подход используется в том коде. ((n)=>n)(console.log(5)) Здесь делается похожее. n изначально было просто параметром, а потом превратилось в функцию с именем n. Перепишем обычным кодом: (function (n) {return n})(console.log(5)) Вызывается сразу функция n которую я даже не объявлял, я объявил просто параметр n в анонимной функции. Как кстати переписать эти 2 строчки чтобы вызвать отдельно а не сразу после объявления? Понял, вот так можно через ссылку. let d = (function (n) {return n}) console.log(d(5)) Или сокращенно: let d = (n=>n) console.log(d(5)) Вернемся к коду. Не совсем понял вот эту строку: return fetch(url) }).then(response => response.json()) Что происходит здесь? fetch это встроенный метод Обещаний в который мы передаем в качестве параметра url а затем в обещание через тот же подход через функцию response вызываем метод json, он вытягивает эту ссылку или что?
  5. Как мы можем вызвать функцию r не объявляя ее? Интересует вторая строка после конст. const delay = function(ms) { return new Promise(function (r) { setTimeout((function () { r() } ),ms) } ) Вначале создается анонимная функция с параметром r, а в теле этой анонимной функции вызывается функция r внутри функции setTimeout, , откуда взялся вызов функции r? Я ведь ее не объявлял, у меня только был параметр с именем r в анонимной, функции r нигде не объявлена как функция. Я про этот вызов r() в анонимной функции. <script> const delay = function(ms) { return new Promise(function (r){ setTimeout((function () {r()}),ms)}) } const url = 'https://jsonplaceholder.typicode.com/todos' function fetchTodos(){ console.log('Fetch todo started') return delay(2000).then(()=>{ return fetch(url) }).then(response => response.json()) } fetchTodos() .then(data =>{ console.log('Data', data)}) .catch(e=>console.error(e)) </script>
  6. Скажите, а целесообразно переписать мой код с использованием асинхронных функций? Сейчас начал изучать асинхронные функции читать, скоро создам следующий пост если что будет не ясно, пока не совсем понимаю смысл написания async function и можно ли ее применить к коду моему. const fib = [1,2,3,5,8,13] for(var i = 0; i < fib.length; i++){ (function(j){ setTimeout(function() { console.log(`fib[${j}] = ${fib[j]}`) },1500) })(i) }
  7. тренировочная let fib = [ 1, 2, 3, 5, 8, 13 ]; var xfib = []; let x = 0; for( i of fib ) { (( j ) => { void setTimeout(() => { xfib[ x++ ] = j; }, 1500); })( i ); } Стрелочная функция здесь анонимная с параметром j в который попадает значение i за каждой итерацией? Эта строка нужна чисто чтобы заполнить пустой массив, создав клон массива?
  8. Вместо анонимной вы сделали запись короче стрелочной функцией.. for...of вы перебрали элементы массива fib.. и записали все в новый пустой массив xfib, а void в этом коде какую роль играет? Вот так без void также работает: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> <body> <script> let fib = [ 1, 2, 3, 5, 8, 13 ]; var xfib = []; let x = 0; for( i of fib ) { (( s) => { setTimeout(() => { xfib[ x++ ] = s; console.log(xfib) }, 1500); })( i ); } </script> </body> </html>
  9. При var i = 0 при проверке условия цикла тело цикла вообще выполняется? Или 5 раз проверяется условие но тело не выполняется? 5 раз как проверяется условие выводы почему не происходят?
  10. Почему код срабатывает только тогда когда var i = 0; поменять на let i = 0;? Если оставить код как есть вывод: fib[6] = undefined Сам код <!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> <body> <script> const fib = [1,2,3,5,8,13] for(var i = 0; i < fib.length; i++){ setTimeout(function() { console.log(`fib[${i}] = ${fib[i]}`) },1500) } </script> </body> </html> Вот такой код: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> <body> <script> const fib = [1,2,3,5,8,13] for(var i = 0; i < fib.length; i++){ (function(j){ setTimeout(function() { console.log(`fib[${i}] = ${fib[i]}`) },1500) })(i) } </script> </body> </html> выдаст также fib[6] = undefined
  11. Вот еще вариант один: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> <body> <script> let Person = function Pers(name, age, gender) { // Имя будет Pers this.name = name; this.age = age; this.gender = gender; }; Person.prototype.greet = function () { console.log("My name is " + this.name); } let Person2 = Person; Person2.prototype.goodbye = function () { console.log("Goodbye, " + this.name); } let Son = function (age, skils) { // Имя будет Son // Родительский конструктор вызывается до дочернего конструктора, // чтобы не было перезаписывания новых полей. Person.call(this, undefined, age, undefined); this.skils = skils || []; this.gender; } let Sunny = Son; Sunny.prototype = Object.create(Person.prototype); Sunny.prototype.constructor = Sunny; // Имя будет Son let a = new Person("Петя", 25, "female"); console.log(a); console.log(a.constructor.name); let b = new Son(18, ["рисует", "поет", "водит"]); console.log(b); console.log(b.name); </script> </body> </html> Задался еще таким вопросом. Я передал аргументы конструктору Person создав объект а, let a = new Person("Петя", 25, "female"); а как получить эти значения объекту b и вывести? Если написать так: console.log(b.name); получим undefined при выводе, а мне к примеру нужно унаследовать от родителя эти значения name, age, gender и вывести через потомка. Метод call дал возможность greet вызвать саму себя?
  12. Метод call дал возможность greet вызвать саму себя? очему во втором console.log не происходит вывод 18? Ведь я передал через конструктор аргумент 18. Здесь решил попробовать наследование. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Тест</title> </head> <body> <p id="result"></p> <script> let Person =function(name,age,gender){ this.name = name; this.age = age; this.gender = gender; // return this; }; Person.prototype.greet= function(){ console.log("My name is " + this.name); }; let Son = function(age,skils){ this.skils = skils || []; Person.apply(this,arguments) } Son.prototype = Object.create(Person.prototype); Son.prototype.constructor = Son; let a = new Person("Петя",25,"female"); let b = new Son(18,["рисует","поет","водит"]); console.log(a.age); console.log(b.age + b.skils); </script> </body> </html>
  13. Не вызывается почему то конструктор, пишет что не определенный конструктор хотя я ему определяю список аргументов при вызове. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Тест</title> </head> <body> <p id="result"></p> <script> let Person = { constructor:function(name,age,gender){ this.name = name; this.age = age; this.gender = gender; return this; }, greet: function(){ console.log("My name is " + this.name); } }; var tom = new Person.constructor("Вася",18,"female"); tom.greet(); </script> </body> </html> Почему я не могу использовать просто new для создания объекта, а обязательно нужно использовать Object.create.. Почему нельзя обойтись просто new для вызова конструктора?
  14. Зачем нужен prototype в JavaScript? При создании любого объекта в JavaScript создается новый объект __proto__ в системе который ссылается на функцию(класс) с помощью которого этот объект создан. При объявлении функции или класса создается также объект с именем prototype. Он создается для того чтобы потомки функции-классы могли унаследовать его свойства или для того чтобы сделать чисто инициализацию конструктора, которая происходит после new когда объявляется любая функция или класс?
  15. Элементов 12, а индекс максимальный 11. lastIndexOf(20, -2) ищет с 10 по 0 indexOf(20, -2) ищет с 10 по 12
  16. Вот массив с которым мы работаем: var scores = [10,300, 500, 10, 70, 20, 100, 30, 100, 40, 20, 10]; scores.indexOf(20, -2) - со второго элемента с конца массива, это число 20 идет поиск первого совпадения? Ищет со второго элемента с конца включая его, верно? Второй элемент с конца массива является предпоследним, под индексом 10. scores.lastIndexOf(20,-2) стратегия такая же самая, начинается поиск со второго элемента с конца, включая его? Ведь результат такой же, также выводит индекс 10. Если написать такую строку: scores.lastIndexOf(10,-5) правильно я понимаю, что 5 элемент с конца, это цифра 30, включая ее, с нее стартует поиск к началу массива? И что первое на пути с конца вначало совпадет с цифрой 30, тот и индекс выведется? Даже если эти цифр 30 будет 8 раз на пути к началу массива? Получается отрицательный второй -2 не важно стоит в indexOf или lastIndexOf ищется с конца массива к началу? Такое дело и со строками, не только с числами? indexOf с конца идет вправо, а lastIndexOf c конца идет влево искать элемент..
  17. Непонятно каким образом происходит поиск через indexOf и lastIndexOf если присутствует второй отрицательный элемент массива. Написал для примера код: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Тест</title> </head> <body> <p id="result"></p> <script> var scores = [10,300, 500, 10, 70, 20, 100, 30, 100, 40, 20, 10]; const arrNames = ["Вася","Петя","Коля","Джулия", "Ефросинья","Степан","Борис","Антон","Остап"]; //Ищет с нулевого элемента по конец, первая цифра 20 встречается на 5 индексе result.innerHTML += (scores.indexOf(20)) + ' <br>'; //Ищет с последнего элемента по начало, первую цифру 20 встречается на 10 индексе result.innerHTML += (scores.lastIndexOf(20)) + ' <br>'; result.innerHTML += (scores.indexOf(20, -2)) + ' <br>'; result.innerHTML += (scores.lastIndexOf(20,-2)) + ' <br>'; </script> </body> </html> Интересует вывод последних 2-ух строк со вторым отрицательным параметром в indexOf и lastIndexOf. Откуда идет отсчет и как он идет если есть второй отрицательный элемент в параметре, я про цифру -2.
  18. Прочитал статью по ссылке как создать собственный цикл foreach. Вот код: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Тест</title> </head> <body> <p id="result"></p> <script> const array1 = ['a', 'b', 'c']; const array2 = ['d', 'e', 'f']; const array3 = array1.concat(array2,5,7); //Собсвенный цикл forEach var each = function(arr, callback,thisArg) { var i, length = arr.length; for (i = 0; i < length; i = i + 1) { callback.call(thisArg,arr[i], i, arr); } }; each(array3,(rez,d,array3)=>{ result.innerHTML+= d + ' - ' + rez + '<br> ';} ) </script> </body> </html> Зачем нужен все-таки thisArg? Как увидеть в этом коде что он дает?
  19. Я выводил не новый массив, а старый, в этом был залет. Поменял на строку result.innerHTML += i + " - " + rez[i] + '<br>'} Вроде как заработал вывод. Только есть момент. Если к написать вот так: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Тест</title> </head> <body> <p id="result"></p> <script> let arr = ["Я", "изучаю", "JavaScript", "прямо", "сейчас", "помни", "это"]; let rez = arr.slice(-3); for(let i = 0; i<rez.length; i++){ result.innerHTML += i + " - " + rez[i] + '<br>'} </script> </body> </html> Вывод правильный, с конца массива стартует вывод с третьего элемента по последний: 0 - сейчас 1 - помни 2 - это Ели поменять эту строку: let rez = arr.slice(-3); на let rez = arr.slice(2,5); Вывод такой: 0 - JavaScript 1 - прямо 2 - сейчас Но должен произойти вывод со 2-го элемента по 5, но происходит вывод со второго по 4-ый элемент, почему? 2 элемент массива: "JavaScript", 3 элемент массива: "прямо", 4 элемент массива: "сейчас", 5 элемент массива: "помни", 5 -ый элемент, слово помни не выводит.
  20. Прочитал про метод slice на сайте Javascript https://learn.javascript.ru/array-methods. Не правильно выводит массив. Вот код: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Тест</title> </head> <body> <p id="result"></p> <script> let arr = ["Я", "изучаю", "JavaScript", "прямо", "сейчас", "помни", "это"]; arr.slice(-4); for(let i = 0; i<arr.length; i++){ result.innerHTML += i + " - " + arr[i] + '<br>'} </script> </body> </html> Строка arr.slice(-4); Должна с 4-го элемента, считаем с конца массива, так как там минус 4. Это элемент прямо. Должно вывести со слова прямо до конца все элементы. А выводит все элементы полностью. Если изменить код на такой: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Тест</title> </head> <body> <p id="result"></p> <script> let arr = ["Я", "изучаю", "JavaScript", "прямо", "сейчас", "помни", "это"]; let rez = arr.slice(-4); for(let i = 0; i<rez.length; i++){ result.innerHTML += i + " - " + arr[i] + '<br>'} </script> </body> </html> произойдет вывод только первых 4-х элементов, но правило гласит если -4, с конца считаем 4 -ый элемент и выводим все элементы до конца, но выводится почему-то элементы сначала, 0 - Я 1 - изучаю 2 - JavaScript 3 - прямо вместо такого вывода: "прямо", "сейчас", "помни", "это" Второй пример: Если я захочу скопировать с какого-то элемента массива по какой-то. Например со 2-го элемента по 5. И напишу такой код: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Тест</title> </head> <body> <p id="result"></p> <script> let arr = ["Я", "изучаю", "JavaScript", "прямо", "сейчас", "помни", "это"]; let rez = arr.slice(2,5); for(let i = 0; i<rez.length; i++){ result.innerHTML += i + " - " + arr[i] + '<br>'} </script> </body> </html> arr.slice(2,5); Не приосходит копирования, происходит вывод непонятно чего, а вывод такой в итоге: 0 - Я 1 - изучаю 2 - JavaScript хотя я эти элементы не выбирал вообще, а выбирал эти: "изучаю", "JavaScript", "прямо", "сейчас",
  21. Прочитал информацию по ссылке, я так понял такая фишка только с формами работает вывод, если вывод например в span, div или р сделать не получиться. Вот например: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Тест</title> </head> <body> <form name="my"> <input name="one" value="1"> <input name="two" value="2"> </form> <script> document.forms.my.elements.one.value = "Фэнтэзи"; </script> </body> </html> Стартует с объекта документ, заходит в форм, затем выбирает объект my одной из форм, которіе вообще есть с єтим именем, а затем в объект one, а затем свойство value или метод value. для div, span, p никак не поиграешься
  22. Работает и такой вариант: document.getElementById('result').innerHTML += i + ' ' + arr[i] + '<br> ';} и такой: document.getElementById('result'). Какой из этих 2-ух вариантов лучше? Если по простому, то да. Если это так, тогда построим цепочку document.forms.result.innerHTML += i + ' ' + arr[i] + '<br> ';} Тогда получаю ошибку:
  23. Вот так сработало,спасибо <input type="submit" onClick="fanta(); return false;" value="Жми"> Что делает текст return false? Возвращает ложь при отправке формы, из-за этого происходит выввод? result - это объект объекта FORM, а форм объект объекта document? document.form.result? Вот так намного лучше с result.innerHTML = " "; function fanta(){ result.innerHTML = " "; let rez = one.elements.number.value; nextPrime: for(let i = 2; i<=rez; i++){ for( let j = 2; j < i; j++){ if(i%j ==0) continue nextPrime; } result.innerHTML += i + '<br>'; } } Кстати если ввести 50 000 в текстовое поле, браузер подвисает Еще важный момент. Вы говорили что document.write переписывает весь документ при выводе и его лучше не использовать. Если дело обстоит с формой, можно использовать result.innerHTML, а если там просто <p id="result"></p> Как правильней чтобы не переписывался документ производить вывод? К примеру вот такой код не сработает: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Тест</title> <script> let arr = ["Я", "изучаю", "JavaScript", "прямо", "сейчас", "помни", "это"]; arr.splice(-5,1); for(let i = 0; i<arr.length; i++){ result.innerHTML = arr[i];} </script> </head> <body> <p id="result"></p> </body> </html> и такой тоже не сработает: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Тест</title> <script> let arr = ["Я", "изучаю", "JavaScript", "прямо", "сейчас", "помни", "это"]; arr.splice(-5,1); for(let i = 0; i<arr.length; i++){ document.getElementById("result").innerHTML = arr[i];} </script> </head> <body> <p id="result"></p> </body> </html> Сработало только так <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Тест</title> </head> <body> <p id="result"></p> <script> let arr = ["Я", "изучаю", "JavaScript", "прямо", "сейчас", "помни", "это"]; let output = document.getElementById('result'); let str = ' '; arr.splice(-5,1); for(let i = 0; i<arr.length; i++){ str += i + " - " + arr[i] + '<br>'} output.innerHTML = str; </script> </body> </html> Но вы говорите что innerHTML равносильно document.write и так и так код переписывает документ, какая же альтернатива? Как вывести массив не перезаписуя документ? Как сделать подобие того как мы выводили двой цикл for строкой result.innerHTML += i + '<br>';
  24. Разобрался, отладчик Мозила за каждым шагом выводит на экран лучше чем ХРОМ, спасибо. Последний момент с выводом через документ.врайт. Вы предложили альтернативу. Я попробовал вывести весь результат в <p id='result'></p> и вместо строки document.write(i+"<br>"); указал result.innerHTML += i + '<br>'; Запускаю программу, ввожу в текстовое поле 10, нажимаю на кнопку, происходит мгновенный вывод всего результата за 1 сек и сразу вывод исчезает. Почему результат не остается на экране? Как лампочка загорелась и выключилась. Вот полный код. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Тест</title> <script> function fanta(){ let rez = one.elements.number.value; nextPrime: for(let i = 2; i<=rez; i++){ for( let j = 2; j < i; j++){ if(i%j ==0) continue nextPrime; } result.innerHTML += i + '<br>'; } } </script> </head> <body> <form id="one"> <input type="text" name="number" > <input type="submit" onClick="fanta()" value="Жми"> </form> <p id='result'></p> </body> </html> Если написать такую строку result.getElementById('result').innerHTML += i + '<br>'; Тогда вообще вывода не будет, даже мгновенного
  25. Вот выделил как у вас, нажимаю в Хроме F9, пробую даже F10, не срабатывает ничего, просто выделен этот код как на скрине внизу и больше ничего не происходит.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy