javascript - Javascript变量未定义
问题描述
为什么undefined
我移动鼠标时总是提示?它应该返回 true,对吗?我希望有人可以帮助我:) 在你问之前我在另一个 JavaScript 文件中调用了这个类!
class Block {
constructor() {
this.movable = true;
this.move = false;
this.div = document.createElement("div");
this.div.classList.add("block");
this.div.addEventListener("mousemove", function() {
console.log(this.movable);
});
this.div.addEventListener("mousedown", function() {
this.move = true;
console.log("test");
});
this.div.addEventListener("mouseup", function() {
this.move = false;
console.log("test1");
});
}
add() {
document.body.appendChild(this.div);
}
remove() {
document.body.removeChild(this.div);
}
}
解决方案
你可以使用ES6的箭头函数()=>{}
来解决你的问题。箭头函数使用this
当前执行上下文。在这种情况下,它是class
具有初始化movable
属性的实例。
普通匿名函数将使用this
侦听器所附加的对象的 ,在您的情况下是div
. 由于div
没有movable
你得到的财产undefined
。
class Test{
constructor() {
this.movable = true;
this.move = false;
this.div = document.createElement("div");
this.div.classList.add("block");
this.div.addEventListener("mousemove", ()=> {
console.log(this.movable);
});
this.div.addEventListener("mousedown", ()=> {
this.move = true;
console.log("test");
});
this.div.addEventListener("mouseup", ()=> {
this.move = false;
console.log("test1");
});
}
add(){
this.div.textContent ="Hover over me.";
document.body.appendChild(this.div);
}
remove(){
document.body.removeChild(this.div);
}
}
var test = new Test();
test.add();
<body>
</body>
引用 MDN:
箭头函数表达式的语法比函数表达式短,并且没有自己的 this、arguments、super 或 new.target。这些函数表达式最适合非方法函数,它们不能用作构造函数。
推荐阅读
- reactjs - 自定义 Lottie 动画在 React Native 中不起作用
- javascript - 试图从 mongoose 的请求中获取一个空对象以正确处理错误
- windows - net use 在没有用户名和密码的情况下工作,但是当我定义它们时,它给出了系统错误 87 已发生
- html - 如何将内容放在固定标题下方
- swift - 是否可以将 Combine 与 NSManagedObject 的单个字段一起使用?
- ios - 试图理解苹果的状态码定义
- java - Java DecimalFormat HALF_UP 格式双精度值不正确
- json - Postman - 解析 JSON 响应并根据属性值设置变量
- python - 如何转换列表中的字典值?
- amazon-web-services - AWS-EC2 我可以将多个网站上传到一个实例中吗?