Я хотел вызвать метод внутри метода того же класса.
function Dialog() {
this.close = function() {
//code
};
this.dialog = document.createElement("div");
this.dialog.onclick = function() {
this.close();
}
document.body.appendChild(this.dialog);
}
var test = new Dialog();
Я искал ответы, но ничего не помогло: я все еще получаю TypeError: this.close is not a function
в консоли моего браузера, когда я нажимаю на div.
К вашему сведению: здесь вы не используете классы. Вы используете «конструкторскую функцию».
Когда вы используете function() { ... }
, он меняет то, что есть this
, находясь внутри функции. Вам нужно либо привязать функцию к this
, либо использовать стрелочную функцию () => { ... }
.
Использование привязки:
var handleClick = function() {
this.close();
};
this.dialog.onclick = handleClick.bind(this)
Использование функции стрелки:
this.dialog.onclick = () => {
this.close();
}
Попробуйте использовать close () {} вместо this.close = function () {}. См. Пример ниже.
function Dialog() {
close(){
//code
};
this.dialog = document.createElement("div");
this.dialog.onclick = function() {
this.close();
}
document.body.appendChild(this.dialog);
}
var test = new Dialog();
this
внутриonclick
- это элемент, по которому щелкают