#javascript
#javascript
Вопрос:
Недавно я задал вопрос о том, как создать сокращенное имя для addEventListener, в результате чего:
var dom = {
id: function(elementId) {
var element = document.getElementById(elementId);
return Object.create(element, {
on: {
value(event, fn, options) {
element.addEventListener(event, fn, options);
}
}
})
}
};
что, если бы я хотел добавить два объекта.create? Как мне его вернуть? Возможно ли это вообще?
Комментарии:
1. Если вы хотите добавить второй метод, добавьте его после on() . Если вы снова запустите Object.create, вы потеряете метод on().
2. означает ли это, что я должен сделать что-то вроде dom.id.funcName = function(param) {}?
3. @user14945188 Я не понимаю, как это должно работать. Когда я создаю div с
id="el"
помощью and dodom.id("el").on("click", doThis());
, он срабатываетdoThis()
немедленно, и событие щелчка не привязано. Можете ли вы добавить код, показывающий его реализацию?4. Предположим, вы хотите изменить внутренний текст div, вам нужно сделать:
dom.id('el').on('click', function() { this.innerText = 'text' });
5. @symlink не
doThis()
запускает функцию. ПроходитеdoThis
мимо()
.
Ответ №1:
Если я правильно понимаю ваш вопрос, вы можете добавить несколько функций в dom и связать их, вернув это внутри каждой функции. Затем вызовите их следующим образом:
dom.id("el").on("click",()=>console.log("clicked") ).changeText("replacement text");
var dom = {
id: function(elementId) {
var element = document.getElementById(elementId);
return Object.create(element, {
on: {
value(event, fn, options) {
element.addEventListener(event, fn, options);
return this;
}
},
changeText: {
value(text) {
element.innerText = text;
return this;
}
}
})
}
};
dom.id("el").on("click", () => console.log("clicked") ).changeText("replacement text");
<div id="el">This text will be replaced</div>