javascript - 类方法在直接创建对象时起作用,但在通过事件监听器创建时不起作用
问题描述
我有一个类也提供了一些方法。当我直接创建这个类的一个对象并调用这个对象的方法时,一切都按预期工作。如果我让事件侦听器创建对象,则该对象将使用其所有属性(包括通过用户输入确定的名称属性)创建。但是,如果我想通过另一个按钮调用对象的方法,该按钮在创建对象期间连接到该对象的事件监听器,我不会得到预期的结果。
class Kitten{
constructor(name) {
this._name = name;
// ...
}
timePasses() {
console.log("time is passing");
// ...
}
pet() {
console.log(`You pet ${this._name}`);
this.timePasses();
}
}
const nameInput = document.getElementById("name-input");
const nameKittenButton = document.getElementById("name-btn");
function nameKitten () {
const petButton = document.getElementById("pet");
if (nameInput.value != "") {
const kitten = new Kitten(nameInput.value);
petButton.addEventListener("click", kitten.pet);
console.log(kitten);
}
}
nameKittenButton.addEventListener("click", nameKitten);
这按预期工作:
const kitten = new Kitten("Carlo");
console.log(kitten);
kitten.pet();
但是,当我使用按钮+输入创建小猫然后使用宠物按钮时,我将其作为输出:
You pet undefined
Uncaught TypeError: this.timePasses is not a function
...
我只包含了我认为相关的代码。如果需要,我可以提供其余的。我已经尝试过箭头和普通功能,因为我曾经听说过并体验过普通和箭头功能的处理this
方式不同。然而,这并没有奏效。我仍然认为该错误与如何this
处理有关...
解决方案
推荐阅读
- visual-studio - dotnet pack (.NET 5) 在打包 staticwebassets 时为没有扩展名的文件创建额外的文件夹
- php - 在 wordpress 循环中计数
- javascript - 输入一个非常大的整数会导致一个四舍五入的数字节点js
- javascript - 当我尝试存储选择值时 setState 不起作用
- amazon-web-services - AWS SAM CLI:sam deploy with python3.8 Image failed
- c# - 使用 powershell 将多个 nupkg 文件推送到 Github 包?
- html - 按钮不会改变背景颜色,也不会悬停
- android - 预装的 PdfViewerActivity 不适用于 SelfSigned 可信用户证书 Android 11 版本 2
- sql - 从 Teradata 到 Snowflake 的 SQL 转换,格式为 '9(13) V9(2)'
- python - pandas dataframe中float64检测问题中的nan