在JavaScript很多人复制一个对象的时候都是直接用"=",因为大家都觉得脚本语言是没有指针、引用、地址之类的,所以直接用"="就可以把一个对象复制给另外一个对象,如下代码:
代码1
var i1 = 1; var i2 = i1; i2 = 2; alert("i1:"+i1+",i2:"+i2); 输出结果:i1:1 , i2:2
但可能没有发现,这种“复制”用在对象(object)类型是“错误”的,因为这只是把对象的地址复制,所以如下代码会进行了一次“错误”的复制:
代码2 var o1 = {i : 1,s : "o1"}; var o2 = o1; o2.i=2; o2.s="o2"; alert("o1.i:"+o1.i+",o2.i:"+o2.i); alert("o1.s:"+o1.s+",o2.s:"+o2.s); 输出:o1.i:2 , o2.i:2
o1.s:o2 , o2.s:o2
可能你会问为什么代码1 可以复制,但 代码2 却没有复制?
其实真确来说是基本数据类型可以复制,非基本类型(包括字符串)只复制其引用。为什么要这样做呢?原因很简单,为了减少开销。大家都知道非基本类型有时候很大,如果重新开辟内存来存放一个这么大的对象,开销很大,导致运行会很慢。脚本语言是直接在虚拟机(或者浏览器)运行,它经过虚拟机这一层来处理代码,速度已经相对其他编译语言慢很多,所以如果把非基本对象再做“复制”,那么可能你要等上一年半载才能运行得了程序,因此只能复制对象的引用。
如果需要把整个对象复制,必须一个一个属性或方法引用复制一偏,这样为每个属性开辟内存来存放你需要的数据,当然这样相对来说会很慢,尤其数据量很多的时候,下面是本人写的对象复制函数:
代码3
function cloneAll(fromObj,toObj){ for(var i in fromObj){ if(typeof fromObj[i] == "object"){ toObj[i]={}; cloneAll(fromObj[i],toObj[i]); continue; } toObj[i] = fromObj[i]; } } 把fromObj对象复制到toObj
js重写父类方法的问题
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE> New Document </TITLE> <META NAME="Generator" CONTENT="EditPlus"> <META NAME="Author" CONTENT=""> <META NAME="Keywords" CONTENT=""> <META NAME="Description" CONTENT=""> </HEAD> <BODY> <SCRIPT LANGUAGE="JavaScript"> <!-- function Rect(config){ this.width = config.width; this.height = config.height; this.area = function(){ alert(11); }; } function myRect(config){ Rect.call(this,config); this.name = config.name; this.area = function(){ //这里如何调用一下父类的area方法? alert(22); //最终效果,是先alert(11),然后alert(22); } } var a =new myRect({width:1,heigth:2,name:3}); a.area(); //--> </SCRIPT> </BODY> </HTML>
相关推荐
拷贝Javascript对象复制工具用于复制,克隆和合并对象的通用工具集。 节点使用情况: var jsoCopy = require ( 'jsocopy.js' ) // or 'jsocopy.min.ja' , jsoClone = require jsoCopy . clone , jsoMerge = require ...
js克隆使用深度复制的Javascript对象复制用法var deepClone = require ( './js-clone/index.js' ) ;var object = { name : 'Kator James' , work : { companyName : 'LogicalAddress Ltd' , getCompanyName : ...
每个JavaScript对象都有一个`__proto__`属性,指向它的构造函数的原型。当试图访问对象的一个属性时,如果该对象上没有这个属性,JavaScript会查找其`__proto__`,再找不到就继续查找`__proto__`的`__proto__`,直到...
JavaScript对象定义是编程语言中的核心概念,它在Web开发中起着至关重要的作用。JavaScript是一种基于原型的对象导向语言,它的对象定义方式具有独特的灵活性。在本文中,我们将深入探讨JavaScript对象的定义、创建...
此外,如果你需要批量添加的对象是来自JSON格式的数据,你可能需要先使用`JSON.parse()`转换JSON字符串为JavaScript对象。例如: ```javascript let jsonStr = '[{"key1": "value1"}, {"key2": "value2"}]'; let ...
在JavaScript编程中,扩展类、克隆对象以及混合类是经常会用到的技术,它们各自有其特定的用途和实现方式。 首先我们来探讨“JS扩展类”。在JavaScript中,没有传统意义上的类继承机制,但可以通过原型链...
JavaScript对象具有原型链,允许对象继承其他对象的属性和方法。`__proto__`(非标准,推荐使用`Object.getPrototypeOf`)指向其构造函数的原型: ```javascript var parentObj = { parentMethod: function() {} }; ...
这里我们将详细讨论三种克隆JavaScript对象的方法。 ### 方法一:递归深度复制 ```javascript function clone(obj) { var o; switch (typeof obj) { case 'undefined': break; case 'string': o = obj + '';...
本小册"JavaScript对象经典小册 chm"深入探讨了JavaScript中的核心概念——对象和数组,旨在帮助开发者更好地理解和掌握这些基础知识。 一、JavaScript对象 1. 对象概述:JavaScript对象是一种数据结构,它由键值对...
综上所述,本段代码主要展示了如何在JavaScript中处理JSON数据,包括JSON字符串与JavaScript对象之间的转换以及对对象数组的遍历和属性复制。这些操作在实际开发中非常常见,是前端开发人员必备的基础技能之一。通过...
总的来说,JavaScript对象的深度克隆对于保持数据的独立性和防止意外修改至关重要,尤其是在处理复杂的组件状态或需要持久化数据时。开发者可以根据项目需求和浏览器兼容性选择合适的深度克隆实现方式。
在JavaScript中,创建类和对象是面向对象编程的基础。本文将详细介绍几种常见的创建对象的方法,包括它们的特点和优缺点。 5.1 工厂方法 工厂方法是一种创建对象的模式,通过一个函数来创建具有特定属性和行为的...
- 如果`id`也没有出现过,创建一个新的对象,复制当前对象的`id`和`magicId`到新对象,并将新对象添加到`result`数组中。 - 将当前对象的`magicId`和`id`标记为已出现,即`full[aaa] = true`和`full[bbb] = true`...
JavaScript面向对象是编程语言JavaScript的一个核心概念,它允许开发者通过对象来封装数据和操作数据的方法。在这份教程中,将详细介绍JavaScript面向对象的基础知识点,并通过代码示例来阐述如何在JavaScript中创建...
六、对象复制 JavaScript提供浅拷贝(`Object.assign()`)和深拷贝(例如,JSON.parse(JSON.stringify(obj)))两种方式复制对象。 ```javascript var copy = Object.assign({}, john); // 浅拷贝 ``` 七、对象...
虽然这种方法简单,但它不能处理所有类型的JavaScript对象。例如,日期对象、正则表达式、函数、`undefined`值等将丢失或转换为其他值。 在提供的示例中,这两种方法都被用来创建`schedule`对象的深副本,并在副本...
18. **对象复制和合并**:讲解浅拷贝和深拷贝的区别,以及`Object.assign()`方法用于合并对象。 19. **ES6及以后的新特性**:可能包括类、模块、解构赋值、箭头函数、Promise等现代JavaScript特性。 20. **性能...
JavaScript对象允许动态添加、修改和删除属性,无需预先声明。 五、原型与继承 在JS中,每个对象都有一个隐式原型属性 `__proto__`,指向创建它的构造函数的原型。这使得对象可以继承其他对象的属性和方法。通过 `...
JavaScript对象是JS编程中的核心概念,它是一种数据结构,用于存储和组织数据。在JavaScript中,一切都是对象,包括基本类型如字符串、数字和布尔值,它们都有对应的包装对象。理解JavaScript对象模型对于深入学习和...