#javascript #object #methods #clone #shortcut
#javascript #объект #методы #клонировать #ярлык
Вопрос:
Я пытаюсь создать ярлык для значка (html-элемента), который является объектом, и у этого объекта есть несколько методов, например. openWindow(), и я хочу, чтобы, когда я нажму на ярлык, этот ярлык запускал метод this object (оригинальный html-элемент).
Пример:
class File{
constructor(fileName){
this.name = fileName;
this.element = document.createElement("div");
this.addFile();
}
openWindow(){
console.log("You opened", this.name);
}
addFile(){
document.body.appendChild(this.element);
this.element.addEventListener('click',openWindow)
}
}
const orginalElement = new File("file1");
const shortcut = orginalElement.cloneNode(true);
shortcut.addEventListener('click', openWindow);
Может быть, мне следует использовать WeakMap или что-то другое, чего я не знаю.
Так же как и любой метод, который может возвращать объект, когда я знаю значение свойства объекта?
Потому что в моем коде каждый объект имеет свойство ‘id’, а у ярлыков thoose есть атрибут ‘id’, который должен совпадать с идентификатором свойства исходного объекта.
Ответ №1:
Если я вас правильно понял, вы можете использовать функции со стрелками в своем классе, чтобы сделать их автоматически привязанными к this
ним, независимо от того, как вы их используете.
class FileIcon {
constructor(fileName) {
this.name = fileName;
this.addFile();
}
openWindow = () => {
console.log("You opened", this.name);
}
addFile() {
this.element = document.createElement("button");
this.element.innerText = "Button " this.name;
document.body.appendChild(this.element);
this.element.addEventListener('click', this.openWindow);
}
}
const a = new FileIcon("foo");
const b = new FileIcon("bar");
const link = document.createElement("a");
link.href = "#";
link.innerText = "Link for foo";
link.addEventListener("click", a.openWindow);
document.body.appendChild(link);
Комментарии:
1. Спасибо! Я не знал, что в качестве второго аргумента можно ввести объект с помощью метода.