Прежде всего, если вы хотите иметь возможность вызывать вашу функцию на this
, вы должны знать, что здесь представляет ключевое слово this
.Один из простых способов сделать это - это console.log.
Итак, this
- это элемент DOM, на котором включен встроенный JavaScript!Подтверждено здесь: это в встроенном обработчике событий .Хорошо, если вы хотите получить больше информации, console.log §.constructor.
Итак, это HTMLParagraphElement
.Вот что вы получите, если вызовете это:
document.createElement("p");
Итак, если вы хотите иметь возможность вызывать this.setParagraphText
, все сводится к вызову setParagraphText
для объекта HTMLParagraphElement.Но для того, чтобы сделать это, HTMLParagraphElement должен реализовать его, и один из способов сделать это, как предложил субарахнид, - добавить функцию к своему прототипу, чтобы она использовалась всеми его экземплярами.Если вы считаете, что это было бы полезно, взгляните на веб-компоненты.
Вот ссылка: Расширение нативных элементов HTML .
По сути, вы делаете это так(и классная вещь здесь - функциональность, которая изменяет свое содержимое при нажатии на нее, будет инкапсулирована в классе):
<!DOCTYPE html>
<html>
<body>
<script>
// See https://html.spec.whatwg.org/multipage/indices.html#element-interfaces
// for the list of other DOM interfaces.
class CoolParagraph extends HTMLParagraphElement {
constructor() {
super();
this.addEventListener('click', e => this.setParagraphText('new value'));
}
setParagraphText(v) {
this.innerHTML = v;
}
}
customElements.define('cool-paragraph', CoolParagraph, {extends: 'p'});
</script>
<!-- This <p> is a cool paragraph. -->
<p is="cool-paragraph">Cool paragraph! Click on me and the content will change!</p>
</body>
</html>
Так что вам даже не нужно больше писать встроенный Javascript!
Но если вы хотите, чтобы все было по-своему и добавить свой встроенный JavaScript, этоотлично.
<!-- Note the this.setParagraphText(), now it works! -->
<p is="cool-paragraph" onclick="this.setParagraphText('foo bar')">Cool paragraph! Click on me and the content will change!</p>
<!DOCTYPE html>
<html>
<body>
<script>
// See https://html.spec.whatwg.org/multipage/indices.html#element-interfaces
// for the list of other DOM interfaces.
class CoolParagraph extends HTMLParagraphElement {
constructor() {
super();
//this.addEventListener('click', e => this.setParagraphText('new value'));
}
setParagraphText(v) {
this.innerHTML = v;
}
}
customElements.define('cool-paragraph', CoolParagraph, {extends: 'p'});
</script>
<!-- This <p> is a cool paragraph. -->
<p is="cool-paragraph" onclick="this.setParagraphText('foo bar')">Cool paragraph! Click on me and the content will change!</p>
</body>
</html>
Я не знаю, отвечает ли это на ваш вопрос, но, надеюсь, это направит вас в правильном направлении.