javascript - JavaScript 类函数可以添加到 ul,但要清除时未定义
问题描述
我正在为我的投资组合开发一个小型网络应用程序,基本上它模仿了餐厅服务员用来输入客户订单、计算总数和“打印”账单的那种系统——只有前端,没有后端。到目前为止,我所做的一切都有效,除了一件。我希望可以根据要求清除整个账单(假设犯了一个巨大的错误)。我可以在主 javascript 文件中执行此操作,但如果我尝试使用用于填充它的同一类,则该对象是“未定义的”。
下面是我班级的基本结构(我删除了与这个问题无关的代码)。
class UI{
constructor(){
this.billUL = document.querySelector('#bill-ul');
}
//succeeds, no undefined errors
insertInBill(items){
//get some values out of items
//create and add items to li element
//append li element
this.billUL.appendChild(li);
}
//fails - it evaluates as undefined
clearBill(){
this.billUL.innerHTML = '';
}
}
主 javascript 文件 - 这工作正常:
const billUL = document.querySelector('#bill-ul');
clearBillBtn = document.getElementById('clear-bill')
clearBillBtn.addEventListener('click',clearBill);
function clearBill() {
billUL.innerHTML = '';
billTotal.innerText = '';
}
基本上,我可以使用类中的函数正确添加项目,但如果我尝试清除它,它是未定义的。正如我所说,我的解决方法是在我的主 javascript 文件中创建 clearBill() 文件并且它可以工作。
任何人都可以解释为什么它在尝试清除时在类中未定义,但在尝试无限期地添加项目时却没有?
解决方案
因为您使用clearBill
传递作为对事件侦听器的引用,所以在执行时clearBill
this
它内部 指向带有 的元素id="clear-bill"
,而不是指向您的类的实例。
要修复它,只需bind(this)
对中的实例constructor
:
constructor(){
/* ... other code to run on construction time */
// replace this.clearBill by itself, but bound to `this`
this.clearBill = this.clearBill.bind(this);
}
推荐阅读
- alert - 如何在单个 graf 上设置多个警报
- android - 使用 CoordinatorLayout 时如何隐藏工具栏的部分内容
- git - 在 LAN 网络中克隆 git 远程存储库的问题
- javascript - 将自己创建的具有不同键名的 JSON 数组绑定到 sap.m.List
- python - Python 的 Statsmodels glm 抛出 PerfectSeparationError,R 返回结果
- css - 带有 3 列的粘性页眉/页脚。在列内滚动的 div
- c# - openpon库如何使用tls
- php - 发送表单时防止数据库中的重复条目
- javascript - Node js 和 express js https 设置问题与 php
- vbscript - 用vbs创建隐藏的txt文件