javascript - JavaScript 对象和在其中创建的元素之间有什么关系?
问题描述
是否可以在 this.son 的 eventListener 中将 this.brother 作为变量传递?
function Object(a){
this.brother = a;
this.son = document.createElement("div");
document.getElementById('parent').appendChild(this.son);
this.son.addEventListener('mousedown',function(){
onMouseDown(event,this.brother);
});
}
用户输入稍后会更改 this.brother 的值,所以我不能只传递输入变量a。
每次这个兄弟的值发生变化时,我是否必须添加一个新的eventListener?
解决方案
您的问题基本上归结为关键字this
在函数中的含义。有三个选项。
1.“适当”的功能
this.son.addEventListener('mousedown', function() {
onMouseDown(event, this.brother);
});
如果您使用完整的函数定义语法定义函数function() {}
,则 ,this
将引用调用该函数的对象。在事件侦听器的情况下,它是您在其上定义侦听器的对象,在您的情况下是div
您创建的对象。这意味着你会得到一个错误,因为div
元素没有一个名为brother
.
2.箭头功能
箭头函数是最近几年引入的,并使用不同的语法:
this.son.addEventListener('mousedown', () => {
onMouseDown(event, this.brother);
});
箭头函数在各个方面都与“正确”函数完全一样,但有一个例外:它们没有自己的this
,即this
在定义函数的范围内引用它所指的任何内容。在您的情况下,它将引用您在函数中初始化的对象Object()
。这可能是你想要的。
(旁注:你真的不应该为你的函数Object
命名,这个名字已经被 JavaScript 中所有对象的基类所使用。覆盖它会导致各种麻烦)
3.绑定函数
JavaScript 中的函数是对象,因此它们也有方法。其中之一是bind()
,它允许您创建函数的绑定副本:
this.son.addEventListener('mousedown', (function() {
onMouseDown(event, this.brother);
}).bind(this));
绑定函数也像“正确”函数一样工作,除了this
总是引用您作为参数传递给bind()
. 在箭头函数之前,绑定函数曾经是确保this
始终引用范围内相同对象的最普遍方法。在箭头函数出现后,它们开始失宠,因为箭头函数更高效,代码更易读。
推荐阅读
- ffmpeg - ffprobe/ffmpeg 报告通过标准输入提供文件时的不同视频持续时间
- java - 如何为开源服务器端(java)文件开发服务器端(jsp)代码?
- python - 如何获取正在使用的 ipython 笔记本的文件路径?(相当于 __file__)
- xcode - 如何让我的 SwiftUI UIViewRepresentable 在预览中尊重intrinsicContentSize?
- android - java.lang.IncompatibleClassChangeError:类 'org.apache.http.message.BasicHeader' 未实现接口 'org.apache.http.NameValuePair'
- algorithm - 如何找到对数组进行排序所需的最小交换次数?
- javascript - 如何解决检索数据时由于操作顺序不同导致javascript+firebase函数返回值不正确的问题?
- r - 使用 ggplot 绘制多色垂直线,以将每种类型的平均时间显示为构面。每种类型都有不同的垂直线
- javascript - 如何通过图像查找元素
- ios - 如何从 Azure Pipeline 在 Bitbucket 中更新构建状态?