我是Javascript的新手,正在编写一个Chrome扩展,它可以抵消电子邮件网站上一系列电子邮件中的"click“函数调用。我的问题是,我偏置的函数是通过引用传递的,这导致它们最终都指向一个单击事件。
我的代码:
//Offsets the email links
for (var i = emails.length - 1; i >= amountToRemove; i--) {
var a = emails[i];
var b = emails[i - amountToRemove];
a.addEventListener('click', (x) => {b.click(); x.stopPropagation(); return false;})
}
并稍微阐述一下这个问题:即。假设amountToRemove为2,i= 10;click()事件的前两个“shift”运行良好,但在第三个shift中,数组中第9个(最后)和第7个对象的click()函数指向相同的函数,这并不是预期的结果。我尝试使用下面的命令制作函数的“深度副本”
JSON.parse(JSON.stringify(object))
以及互联网推荐的其他方法都无济于事。
我的问题是,有没有办法制作.click()函数的“深层”副本,使它们不指向相同的对象,并导致每个单击事件最终指向相同的单击事件?
发布于 2016-06-17 04:44:15
看起来你的问题并不是需要一个函数的“深层”副本。相反,我认为你的问题是,当你点击第9封电子邮件时,它会触发对第7封电子邮件的点击,然后再触发对第5封电子邮件的点击。一种稍微有点老套的方式来做你想做的事情:
//Offsets the email links
var interceptingClick = false;
for (var i = emails.length - 1; i >= amountToRemove; i--) {
var a = emails[i];
var b = emails[i - amountToRemove];
a.addEventListener('click', (x) => {
if (interceptingClick)
return;
interceptingClick = true;
b.click();
interceptingClick = false;
x.stopPropagation();
return false;
});
}
但是你想要实现的行为似乎有点奇怪。也许你可以告诉我们为什么你想这样做,以防有其他你可以做的更容易和更健壮的事情。
https://stackoverflow.com/questions/37873131
复制