var example = {
get step_1() {
return '12345'
},
get step_2() {
var key = this.step_1;
console.log(key + ' from "step_1"')
}
};
example.step_2 // 12345 from "step_1"
example
как this
с помощью bind()
// ...
step_2: {
get: (function () {
var key = this.step_1.get();
console.log(key + ' from "step_1"')
}).bind(example), // теперь тут this === example
}
example.step_2.get() // 12345 from "step_1"
// (исходный код вопроса)
// magic!
Object.keys(example).forEach((key) => {
if ("get" in example[key])
example[key].get = example[key].get.bind(example);
});
example.step_2.get(); // 12345 from "step_1"
window.location.hash
посмотреть при загрузке (документация)window.addEventListener("hashchange", funcRef, false);
===
это строгое равенство — сравнивает ещё и типы. number === "666" // сравнение со строкой (текстом)
number === 666 // сравнение с числом — то, что надо
class="red"
document.querySelectorAll('div.red').forEach((el) => {
el.childNodes.forEach((node) => {
if (node.nodeType === Node.TEXT_NODE) {
const wrap = document.createElement('span');
wrap.classList.add('violet');
el.replaceChild(wrap, node);
wrap.appendChild(node);
}
})
})
document
событие "click" или "mousedown".div.mobile-panel
через однократный вызов Node.contains() (он смотрит сразу на любую глубину). Если внутри – не прятать, если снаружи – закрывать меню.const menuRoot = document.querySelector('div.mobile-panel');
document.addEventListener('mousedown', (e) => {
if (! menuRoot.contains(e.target)) {
document.body.classList.remove('-show')
}
})
const quiz = {
question: 'Выберите один вариант',
choices: [
{
answer: 'мотоцикл',
child: {
question: 'Выберите модель мотоцикла',
choices: [
{ answer: 'Гоночный', child: { ... } },
{ answer: 'Чоппер', child: { ... } }
]
}
},
{
answer: 'Машина',
child: {
question: 'Выберите модель машины',
choices: [
{ answer: 'Ока', child: { ... } },
{ answer: 'Bentley', child: { ... } }
]
}
}
]
},
data-flat
записан номер квартиры. data-flat
совпадает с этим номером. Для этого используется селектор [data-flat="42"]