const obj = { prop: 123 }
// Это два одинаковых выражения
obj.prop // 123
obj['prop'] // 123
const obj = { prop: 123 }
const name = 'prop';
obj[name] // 123
const my_func = function() {}
// чтобы ее вызвать
my_func();
const obj = {
my_func: function(){}
}
const my_other_func = function() {}
const obj = {
my_func: my_other_func
}
obj.my_func()
obj['my_func']()
// или
const name = 'my_func';
obj[name]()
async function getData() {
const o_btc = await fetch('https://api.coingecko.com/api/v3/coins/bitcoin')
.then(res => res.json());
const o_eth = await fetch('https://api.coingecko.com/api/v3/coins/ethereum')
.then(res => res.json());
$('.demo').html(o_btc.market_data.current_price.rub / o_eth.market_data.current_price.rub);
}
getData();
document.querySelectorAll('.button').forEach(button => {
button.addEventListener('click', () => {
button.toggleClass('active');
});
});
document.querySelectorAll('.button').forEach(button => {
button.addEventListener('click', event => {
event.target.toggleClass('active');
// Или так, если есть вложенные элементы
// event.target.closest('.button').toggleClass('active');
});
});
const pName = prompt('Введите имя первого человека');
const pAge = prompt('Введите возраст первого человека');
const secName = prompt('Введите имя второго человека');
const secAge = prompt('Введите возраст второго человека');
const person1 = new Person(pName, pAge);
const person2 = new Person(secName, secAge);
const car1 = new Car('sedan', 'petrol','rear brakes','hunday', [person1]);
const car2 = new Car('van', 'diesel', 'rear brakes','nisan', [person1, person2]);
const garag1 = new Garag ('Cindy', '2 Cars', [person1], [car1,car2]);
const garag2 = new Garag ('Jon', '1 Cars', [person2], [car2]);
console.log(garag1,person1,car1,car2);
const o = e.target.closest('.blog__item')
const duplicateArray = ['a', 'b', 'c', 'a', 'b', 'c', 'q'];
console.log(
Array.from(new Set(duplicateArray))
);
const duplicateArray = ['a', 'b', 'c', 'a', 'b', 'c', 'q'];
console.log(
duplicateArray.reduce(function (carry, item) {
if (!carry.includes(item)) carry.push(item);
return carry;
}, [])
);
const duplicateArray = ['a', 'b', 'c', 'a', 'b', 'c', 'q'];
console.log(
[...duplicateArray.reduce((carry, item) => [...carry].includes(item) ? carry : carry + item, '')]
);
<button class="open" data-target="b1">Open1</button>
<button class="open" data-target="b2">Open2</button>
<div class="hidden-block" id="b1">
<ul>
<li>Первый</li>
</ul>
<button class="close">Close</button>
</div>
<div class="hidden-block" id="b2">
<ul>
<li>Второй</li>
</ul>
<button class="close">Close</button>
</div>
// 1. Константа, значение не меняется
// 2. Это кнопка, а не блок (название фиговое)
// 3. Их может быть несколько на странице
const openButtons = document.querySelectorAll('.open');
// Закрывашка находится внутри блока, поэтому искать ее нужно именно внутри блока
// чтобы она закрывала только свой блок. Это выкидываем
// let backBlock = document.querySelector('.close');
// Вешаем клики на все открывашки
openButtons.forEach(btn => {
btn.addEventListener('click', e => {
// дергаем ID из data-атрибута
const targetId = e.target.dataset.target;
document.getElementById(targetId).classList.add('open-hidden-block');
});
});
// Перебираем все блоки и ищем в них закрывашки
document.querySelectorAll('.hidden-block').forEach(block => {
const closer = block.querySelector('.close');
closer.addEventListener('click', () => {
block.classList.remove('open-hidden-block');
});
});