const something = {
method() {
let variable = false;
// Неявно возвращается undefined
// return undefined;
}
};
something.method().variable = true; // undefined.variable = true
// error (Cannot set property "variable" of undefined)
console.log(something.method().variable); // Этот вывод вообще не выполнится
class EventEmitter {
constructor() {
this.listeners = {};
}
on(event, cb) {
this.listeners[event] = this.listeners[event] || [];
this.listeners[event].push(cb);
}
emit(event) {
for (let cb of this.listeners[event]) {
cb();
}
}
}
class User extends EventEmitter {
constructor(name) {
super();
this.name = name;
}
}
const user = new User("Alex");
user.on("greeting", () => {
console.log("Hello " + user.name);
});
user.on("farewell", () => {
console.log("Bye bye " + user.name);
});
setTimeout(() => {
user.emit("greeting"); // Hello Alex
}, 3000);
setTimeout(() => {
user.emit("farewell"); // Bye bye Alex
}, 6000);
const sun = new class { // singleton...
constructor(color, isBig) {
this.color = "yellow";
this.isBig = true;
}
}();
function createSunSingleton() {
var instance; // замыкание...
return function() {
if (typeof instance === "object") return instance;
this.color = 'yellow';
this.isBig = true;
instance = this;
}
}
var Sun = createSunSingleton();
var sun1 = new Sun;
Sun.instance = null;
var sun2 = new Sun;
console.log(sun1 === sun2) // true
// Слушаем событие клика на всем контейнере.
document.querySelector("#messages-container").addEventListener("click", event => { // Делегирование...
if (event.target.classList.contains("remove-button")) { // Если элемент на который кликнули внутри контейнера имеет класс remove-button
event.target.parentNode.remove(); // то удаляем родительский элемент кнопки
}
}, false);
// Можно и так...
for (let button of document.querySelectorAll(".remove-button")) {
button.addEventListener("click", event => {
button.parentNode.remove();
}, false);
}
// Ну или так...
document.querySelectorAll(".remove-button").forEach(button => button.addEventListener("click", () => button.parentNode.remove(), false));
var i = 10;
var array = [];
while (i--) {
array.push(function() {
return i + i;
});
}
array.forEach(item => console.log(item())); // 10 раз напечатается -2
// после выхода из цикла i = -1; И так как i является "глобальной", то все функции будут "ссылаться" на одно и тоже значение после цикла
// array[function() { return i + i; }, function() { return i + i }, function() { return i + i }, ...]
// ==> array[function() { return -1 + -1 }, function() { return -2 }, ...]
// ==> array[0]() ==> return -2;
// ------------------------------------------------------
// Проблему можно решить так:
var i = 10;
var array = [];
while (i--) {
array.push((function(i) {
// Сохранить i в замыкании
return function() {
return i + i;
}
})(i));
}
array.forEach(item => console.log(item())); // 18 16 14 12 10 8 6 4 2 0
// ------------------------------------------------------
// Или так
var i = 10;
var array = [];
while (i--) {
let value = i;
array.push(function() {
return value + value;
});
}
array.forEach(item => console.log(item())); // 18 16 14 12 10 8 6 4 2 0
let showEvent = new CustomEvent("show", {
detail: {
message: "Showing..."
}
});
document.addEventListener("show", event => alert(event.detail.message), false);
setTimeout(() => document.dispatchEvent(showEvent), 5000);
// Возможно не лучшее решение, но это первое что пришло в голову, а более лучшее решение обдумывать не хочется.
import java.util.*;
public class App {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList(); // Создание коллекции
for (int i = 0; i < 1000000; i++) { // Заполнение коллекции последовательностью чисел от 0 до 1000000
list.add(i);
}
Collections.shuffle(list); // организация произвольного порядка
for (int i = 0; i < 10; i++) {
System.out.println(list.get(i) + " "); // Показываем что порядок произвольный, выводя первые 10 чисел к примеру
}
Map<Integer, Boolean> map = new HashMap<>();
for (int i = 0; i < list.size(); i++) {
map.put(list.get(i), true); // Map всегда содержит только уникальные ключи
}
System.out.println(list.size() == map.size()); // Если размеры равны то это значит что в исходной коллекции элементы были уникальны
list.sort(new Comparator<Integer>() {
@Override
public int compare(Integer a, Integer b) {
return a - b;
}
});
System.out.println("Минимальный элемент: " + list.get(0));
System.out.println("Предпоследний по величине элемент: " + list.get(list.size() - 2));
ArrayList<Integer> alist = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
if (list.get(i) % 2 == 0) {
alist.add(list.get(i)); // Сохраняем только четные числа
}
}
list = null;
for (int i = 0; i < alist.size() / 1000; i++) { // первые 1000 элементов
System.out.println(alist.get(i) + " "); // Выводим последовательность четных чисел
}
}
}
const count = (lists, itemClass, startIndex) => {
[...lists].forEach(list => {
[...list.querySelectorAll(`.${itemClass}`)].forEach((li, index) => {
li.innerHTML = `<span>${index + startIndex}</span> ${li.innerHTML}`;
});
});
};
count(document.querySelectorAll(".accent-list-number"), "number", 1);
Array.prototype.forEach.call(document.querySelectorAll(".firststyle"), item => item.style.display = "block");
// Использование одного и того же id для более чем одного элемента не есть хорошо.