denis_alekss
-
Posts
35 -
Joined
-
Last visited
Content Type
Profiles
Forums
Calendar
Store
Posts posted by denis_alekss
-
-
Решил понять смысл 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>
-
fetch(url) возвращает объект промис, response это объект промис, который мы создаем в then и через него получаем доступ в json() чтобы вытащить этот url и в дальнейшем вывести ссылку https://jsonplaceholder.typicode.com/todos через консоль?
-
Спасибо, хорошая ссылка с примерами.
Я читал что первый параметр 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, он вытягивает эту ссылку или что?
-
Как мы можем вызвать функцию 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>
-
Скажите, а целесообразно переписать мой код с использованием асинхронных функций? Сейчас начал изучать асинхронные функции читать, скоро создам следующий пост если что будет не ясно, пока не совсем понимаю смысл написания 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) }
-
11 часов назад, Full-R сказал:
Какая цель вашего кода?
тренировочная
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 за каждой итерацией?
Эта строка нужна чисто чтобы заполнить пустой массив, создав клон массива? -
Вместо анонимной вы сделали запись короче стрелочной функцией.. 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>
-
При var i = 0 при проверке условия цикла тело цикла вообще выполняется? Или 5 раз проверяется условие но тело не выполняется?
5 раз как проверяется условие выводы почему не происходят?
-
Почему код срабатывает только тогда когда 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
-
Вот еще вариант один:
<!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 вызвать саму себя?
-
Метод 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>
-
Не вызывается почему то конструктор, пишет что не определенный конструктор хотя я ему определяю список аргументов при вызове.
<!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 для вызова конструктора?
-
Зачем нужен prototype в JavaScript?
При создании любого объекта в JavaScript создается новый объект __proto__ в системе который ссылается на функцию(класс) с помощью которого этот объект создан.
При объявлении функции или класса создается также объект с именем prototype.
Он создается для того чтобы потомки функции-классы могли унаследовать его свойства или для того чтобы сделать чисто инициализацию конструктора, которая происходит после new когда объявляется любая функция или класс? -
Элементов 12, а индекс максимальный 11.
lastIndexOf(20, -2) ищет с 10 по 0
indexOf(20, -2) ищет с 10 по 12 -
Вот массив с которым мы работаем:
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 конца идет влево искать элемент..
-
Непонятно каким образом происходит поиск через 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. -
Прочитал статью по ссылке как создать собственный цикл 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? Как увидеть в этом коде что он дает?
-
Я выводил не новый массив, а старый, в этом был залет. Поменял на строку
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 -ый элемент, слово помни не выводит.
-
Прочитал про метод 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", "прямо", "сейчас",
-
Прочитал информацию по ссылке, я так понял такая фишка только с формами работает вывод, если вывод например в 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 никак не поиграешься
-
Работает и такой вариант:
document.getElementById('result').innerHTML += i + ' ' + arr[i] + '<br> ';}
и такой:
document.getElementById('result').
Какой из этих 2-ух вариантов лучше?
21 час назад, AlexZaw сказал:21.12.2020 в 12:28, denis_alekss сказал:result - это объект объекта FORM, а форм объект объекта document?
Если по простому, то да.
Если это так, тогда построим цепочку
document.forms.result.innerHTML += i + ' ' + arr[i] + '<br> ';}
Тогда получаю ошибку:
ЦитатаUncaught TypeError: document.forms[0] is undefined
-
Вот так сработало,спасибо
<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>';
-
Разобрался, отладчик Мозила за каждым шагом выводит на экран лучше чем ХРОМ, спасибо.
Последний момент с выводом через документ.врайт. Вы предложили альтернативу. Я попробовал вывести весь результат в <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>';
Тогда вообще вывода не будет, даже мгновенного
-
get/set и его использование в Javascript
in JavaScript
Posted
Когда нужно его вообще использовать get/set?