首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何制作一个函数的“深层”拷贝-- Javascript

如何制作一个函数的“深层”拷贝-- Javascript
EN

Stack Overflow用户
提问于 2016-06-17 04:27:13
回答 1查看 58关注 0票数 0

我是Javascript的新手,正在编写一个Chrome扩展,它可以抵消电子邮件网站上一系列电子邮件中的"click“函数调用。我的问题是,我偏置的函数是通过引用传递的,这导致它们最终都指向一个单击事件。

我的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//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()函数指向相同的函数,这并不是预期的结果。我尝试使用下面的命令制作函数的“深度副本”

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
JSON.parse(JSON.stringify(object)) 

以及互联网推荐的其他方法都无济于事。

我的问题是,有没有办法制作.click()函数的“深层”副本,使它们不指向相同的对象,并导致每个单击事件最终指向相同的单击事件?

EN

回答 1

Stack Overflow用户

发布于 2016-06-17 04:44:15

看起来你的问题并不是需要一个函数的“深层”副本。相反,我认为你的问题是,当你点击第9封电子邮件时,它会触发对第7封电子邮件的点击,然后再触发对第5封电子邮件的点击。一种稍微有点老套的方式来做你想做的事情:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//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;
   });      
}

但是你想要实现的行为似乎有点奇怪。也许你可以告诉我们为什么你想这样做,以防有其他你可以做的更容易和更健壮的事情。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37873131

复制
相关文章
JavaScript非构造函数的继承( object()方法、浅拷贝与深拷贝 )
这里的 object() 函数,就是把子对象的 prototype 属性,指向父对象,从而使得子对象与父对象连在一起。
Leophen
2019/08/23
6630
【面试题解】JavaScript的深浅拷贝,如何手写深拷贝?
本系列面试题旨在学会相关知识点,从而轻松应对面试题的各种形式,本文讲解了 JavaScript 中拷贝的相关知识,以及如何手写深浅拷贝。
一尾流莺
2022/12/10
4330
【面试题解】JavaScript的深浅拷贝,如何手写深拷贝?
Javascript的对象拷贝[每日前端夜话0x53]
翻译:疯狂的技术宅 原文:https://smalldata.tech/blog/2018/11/01/copying-objects-in-javascript
疯狂的技术宅
2019/05/06
5070
Javascript的对象拷贝[每日前端夜话0x53]
【javascript】详解javaScript的深拷贝
前言: 最开始意识到深拷贝的重要性是在我使用redux的时候(react + redux), redux的机制要求在reducer中必须返回一个新的对象,而不能对原来的对象做改动,事实上,当时我当然不
啦啦啦321
2018/01/03
8420
【javascript】详解javaScript的深拷贝
JavaScript中的浅拷贝与深拷贝
JavaScript中的浅拷贝和深拷贝是非常重要的概念,它们在处理对象和数组时具有不同的作用。在编程中,经常需要复制数据以便进行各种操作,但必须注意拷贝的方式,以确保得到预期的结果。
葡萄城控件
2023/10/16
3050
JavaScript中的浅拷贝与深拷贝
如何制作自己的原生 JavaScript 路由
当你想到路由时,通常会想到类似 React 之类的库。但实际上,这些库和框架仍然使用 vanilla JavaScript。那么该怎么实现呢?
疯狂的技术宅
2020/03/27
3.9K0
JavaScript中的浅拷贝与深拷贝
JS中有两种数据类型,值类型和引用类型,当我们需要把一个变量赋给另一个变量时,对于值类型很简单:
蒋鹏飞
2020/10/15
7410
JavaScript中的浅拷贝与深拷贝
JavaScript深拷贝和浅拷贝
在JavaScript中操作数据的时候,基础数据类型还好,不管是我们怎么赋值修改都不会有什么问题,但是如果我们操作的是数组或者Object,那很容易出现修改了一个值就会把所有的都给变了,这就是浅拷贝。
wade
2020/04/24
5670
JavaScript - 浅拷贝和深拷贝
注: JSON.stringify()转换对象过程中,undefined、任意的函数以及 symbol 值,在序列化过程中会被忽略(出现在非数组对象的属性值中时)或者被转换成null(出现在数组中时)。函数、undefined 被单独转换时,会返回 undefined。
愤怒的小鸟
2020/12/14
6320
javascript 浅拷贝与深拷贝
深拷贝就是在拷贝数据的时候,将数据的所有引用结构都拷贝一份。简单的说就是,在内存中存在两个数据结构完全相同又相互独立的数据,将引用型类型进行复制,而不是只复制其引用关系。
yangdongnan
2019/06/26
7430
javaScript中的浅拷贝 vs 深拷贝
在前端的数据处理当中,有时候往往需要对原有的数据进行克隆拷贝一份,然后在进行操作,但是又不能影响原来的数据
itclanCoder
2020/10/28
6950
javaScript中的浅拷贝 vs 深拷贝
Javascript 中的对象拷贝
说到 javascript 中的对象拷贝,首先我们想到的是 Object.assign() ,  JSON.parse(JSON.stringify()) , 还有 ES6 的展开操作符[... ]
chuchur
2022/10/25
1K0
JavaScript 深拷贝和浅拷贝
在 JavaScript 引用数据类型中,变量保存的是一个指向堆内存的指针,当需要访问引用类型(如对象,数组等)的值时,首先从栈中获得该对象的地址指针,然后再从堆内存中取得所需的数据。
李振
2021/11/26
3030
JavaScript中的拷贝(copy)
如果现有var obj1 = {…}这个对象,想要复制对象obj1,一贯的做法就是obj2 = obj1,这时虽然obj2拥有了obj1的所有属性,但obj2却不是自由的,因为它的改动会影响到obj1,obj1的改动也会影响到obj2,这不是我们所希望的,所以要用到深拷贝和浅拷贝。
刘亦枫
2020/03/19
1K0
JavaScript中的拷贝(copy)
《现代Javascript高级教程》JavaScript深拷贝与浅拷贝
在JavaScript中,对象的拷贝是一项常见的操作。浅拷贝和深拷贝是两种常用的拷贝方式。浅拷贝只复制对象的引用,而深拷贝创建了一个全新的对象,包含与原始对象相同的值和结构。深拷贝和浅拷贝各有适用的场景和注意事项。本文将详细介绍如何实现一个完整而优雅的深拷贝函数,处理循环引用和特殊类型,优化性能,并探讨深拷贝和浅拷贝的应用场景、注意事项和相关属性。
linwu
2023/07/27
6300
JavaScript 深拷贝和浅拷贝
浅拷贝: 拷贝对象的一层属性,如果对象里面还有对象,拷贝的是地址.两者之间修改会有影响 (适用于对象里面属性的值都是简单类型的) 深拷贝:拷贝对象的多层属性,如果对象里面还有对象,也能继续拷贝。使用递归来实现。 浅拷贝 const obj = { name: 'tt', age: 12, love: 'eat' } let newObj = {} for (let k in obj) { newObj[k] = obj[k] } console.log(newObj); 深拷贝 co
且陶陶
2023/04/12
2840
JavaScript 深拷贝和浅拷贝
Javascript深拷贝
var oOriginal = { memNum: 1, // number memStr: "I am a string", // string memObj: { test1: "Old value" // we’ll test }, memArr: [
郑小超.
2018/01/24
5740
JavaScript数组(对象)的深拷贝和浅拷贝
在JavaSCript中的数据类型中,分为两种:原始类型(number/string/boolean/null/undefined)和引用类型(array/object/function)。
celineWong7
2020/11/05
2.4K0
拷贝构造函数 浅拷贝与深拷贝
上一期中我们讲述了构造函数的相关内容,谈到构造函数在形式上有几种分类,即带参数的、不带参数的以及参数列表初始化的,还有一种传引用的构造函数,称为拷贝构造函数,顾名思义,就是起到拷贝的功能,通过一个已经存在的类对象的相关数据初始化一个新的类对象。
叶茂林
2023/07/30
2760
Javascript中使用Lodash工具库的cloneDeep函数实现深拷贝
最近在看Vue_shop实战项目-电商管理系统(Element-UI)的B站视频,看到 P172 08.商品添加-把goods_cat从数组转换为字符串时,讲到了Lodash这个工具库的cloneDeep方法的使用。 Lodash是一个一致性、模块化、高性能的 JavaScript 实用工具库,其官网地址为:https://www.lodashjs.com/,Github托管地址为:https://github.com/lodash/lodash
ccf19881030
2020/04/14
4.2K0

相似问题

制作UIImage的深层拷贝

60

惰性拷贝-如何从浅拷贝创建深层拷贝

11

片段的深层拷贝

11

ArrayList的深层拷贝

20

NSMutableDictionary的深层拷贝

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文