javascript - 如何将此关键字传递给javascript类函数
问题描述
undefinded
尝试this.numberObject
从另一个函数访问时遇到错误init
。
我很确定这是因为我的this
关键字引用了 window 对象。
我的问题是我想不出一种优雅的方式来构建我的代码。
当前代码:
class IncrementNumbers {
constructor() {
this.numberObject = document.querySelector(".incrementNum");
if (this.numberObject != null) {
console.log(this.numberObject.innerHTML);
this.num = this.numberObject.innerHTML;
this.events();
}
}
events() {
console.log("events function ran");
this.init();
}
init() {
let target = 345;
let current = 0;
function addOneToElement() {
if (current === target) {
clearInterval(addOne);
}
current++;
this.numberObject.innerHTML = current; <---- ERROR HERE
}
let addOne = setInterval(addOneToElement, 10);
}
}
export default IncrementNumbers;
错误:
IncrementNumbers.js:44 Uncaught TypeError: Cannot set property 'innerHTML' of undefined
我可以通过添加来修复错误
this.numberObject = document.querySelector(".incrementNum");
到以下功能
init() {
let target = 345;
let current = 0;
function addOneToElement() {
this.numberObject = document.querySelector(".incrementNum"); <--- ADDED HERE
if (current === target) {
clearInterval(addOne);
}
current++;
this.numberObject.innerHTML = current;
}
let addOne = setInterval(addOneToElement, 10);
}
但是,这感觉有点多余,因为我已经在构造函数中引用了元素 Object。我希望该功能init
在页面加载后运行。
有没有更好的办法?
谢谢
解决方案
您的问题似乎来自this
对象的错误传播。
在您的函数中init
,您设置了一个名为的新函数,该函数addOneToElement
在 a 内部调用setInterval
,这setInterval
instance
无法访问您的this
元素class
。
要解决问题,您可以尝试执行类似的操作
class IncrementNumbers {
constructor() {
this.numberObject = document.querySelector(".incrementNum");
if (this.numberObject != null) {
console.log(this.numberObject.innerHTML);
this.num = this.numberObject.innerHTML;
this.events();
}
}
events() {
console.log("events function ran");
this.init();
}
init() {
let target = 345;
let current = 0;
function addOneToElement() {
if (current === target) {
clearInterval(addOne);
}
current++;
this.numberObject.innerHTML = current; // <---- ERROR HERE
}
let addOne = setInterval(addOneToElement.bind(this), 10);
}
}
export default IncrementNumbers;
let addOne = setInterval(addOneToElement.bind(this), 10);
你在哪里绑定this
instance
你class
的函数addOneToElement
。
推荐阅读
- sql - 如何规避错误消息 241(从字符串转换日期和/或时间时转换失败)
- java - Android:片段与堆叠布局
- html - 在 mat-Input 字段中聚焦时如何更改 mat-icon 颜色?
- ms-access - 有没有办法通过访问 vba 将位于我的网站目录中的文件复制到我的本地驱动器中
- java - JAVA,如何在 xml 中编辑节点内的文本?
- sql - 按列分组并显示符合条件的列的值
- angular - NG Prime p-multiSelect 禁用选项不起作用
- json - 通过连接两个变量的 Json 对象值
- android - 服务调用 checkSelfPermission 返回 nullPointerException
- jquery - 如何停止 Jquery-Steps?