首页 > 编程语言 >JavaScript的对象深度克隆

JavaScript的对象深度克隆

时间:2023-06-20 13:01:53浏览次数:49  
标签:function 克隆 clone JavaScript owner newArray 深度 var name


Object.prototype.clone = function() {
		var newObj = {};
		for(var i in this) {
			if(typeof(this[i]) == "object" || typeof(this[i]) == "function") {
				newObj[i] = this[i].clone();
			}
			else {
				newObj[i] = this[i];
			}
		}
		return newObj;
	};

	Array.prototype.clone = function() {
		var newArray = [];
		for(var i = 0; i < this.length; i++) {
			if(typeof(this[i]) == "object" || typeof(this[i]) == "function") {
				newArray[i] = this[i].clone();
			}
			else {
				newArray[i] = this[i];
			}
		}
		return newArray;
	};

	Function.prototype.clone = function() {
		var that = this;
		var newFunc = function() {
			return that.apply(this, arguments);
		};
		for(var i in this) {
			newFunc[i] = this[i];
		}
		return newFunc;
	};

	function Owner(name) {
		this.name = name;
	}

	function Car(owner, brand) {
		this.owner = owner;
		this.brand = brand;
		this.drive = function() {
			alert(this.owner.name + "开着" + brand + "飞奔");
		};
	}

	var o = new Owner("Hao");
	var c1 = new Car(o, "Benz");

	c1.drive();

	var c2 = c1.clone();
	c2.owner.name = "Wang";

	c1.drive();



标签:function,克隆,clone,JavaScript,owner,newArray,深度,var,name
From: https://blog.51cto.com/u_16166070/6521817

相关文章

  • JavaScript学习 -- 对象的属性描述对象
    一、声明一个对象let对象={name:"公众号:编程有你",pwd:123456};二、输出对象属性的描述//console.log(Object.getOwnPropertyDescriptors(对象))获取多有属性console.log(Object.getOwnPropertyDescriptor(对象,'name'))获取指定的属性三、运行结果:writable:true, ......
  • JavaScript 指定格式化日期的方式
    JavaScript指定格式化日期的方式1、使用let和const的方式functionformatDate(date,format){constmap={"M":date.getMonth()+1,//月份"d":date.getDate(),//日"h":date.getHours(),//小时"m":date.getMinut......
  • JavaScript判断两个数组相等的四类方法
    在JavaScript中,数组本质上是一种特殊的对象,它的类型值会返回object。如果我们需要比较两个数组是否相等,不能像比较基本类型(String、Number、Boolean等)一样,使用===(或==)来判断,所以如果要比较数组是否相等,需要使用一些特殊方法。关于JS类型的判断,可见博文typeof详解。本文......
  • 深度优先搜索算法-dfs讲解
    迷宫问题有一个迷宫:S**.....***T(其中字符S表示起点,字符T表示终点,字符*表示墙壁,字符.表示平地。你需要从S出发走到T,每次只能向上下左右相邻的位置移动,不能走出地图,也不能穿过墙壁,每个点只能通过一次。)现在需要你求出是否可以走出这个迷宫我们将这个走迷宫过程称为dfs(深度优先搜索)......
  • 在JavaScript中实现Promise对象
    classPromise2{#status='pending'constructor(fn){this.q=[]constresolve=(data)=>{this.#status='fulfilled'constf1f2=this.q.shift()if(!f1f2||!f1f2[0])returnconstx=f1f2[0].ca......
  • 基于VGG16深度学习网络的目标识别matlab仿真,并结合ROC指标衡量识别性能
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要根据卷积核大小和卷积层数,VGG共有6中配置,分别为A,A-LRN,B,C,D,E,其中D和E两种最为常用,即i我们所说的VGG16和VGG19。具体为:卷积-卷积-池化-卷积-卷积-池化-卷积-卷积-卷积-池化-卷积-卷积-卷积-池化-卷积-卷积-......
  • 基于VGG16深度学习网络的目标识别matlab仿真,并结合ROC指标衡量识别性能
    1.算法仿真效果matlab2022a仿真结果如下:   2.算法涉及理论知识概要         根据卷积核大小和卷积层数,VGG共有6中配置,分别为A,A-LRN,B,C,D,E,其中D和E两种最为常用,即i我们所说的VGG16和VGG19。 具体为: 1.卷积-卷积-池化-卷积-卷积-池化-卷积-卷积-卷积-......
  • JavaScript的数学计算库:decimal.js
    Anarbitrary-precisionDecimaltypeforJavaScript.功能整数和浮点数简单但功能齐全的API复制JavaScript和对象的许多方法Number.prototypeMath还处理十六进制、二进制和八进制值比Java的BigDecimalJavaScript版本更快,更小,也许更容易使用无依赖关系广泛的平......
  • JavaScript中var、let、const的使用和区别
    var:var是声明变量的主要关键字,它的作用域是函数作用域函数作用域:意味着变量在函数内部声明是可见的,在函数外部声明是不可见的var声明的变量可以被重新声明和赋值,它可以在同一个作用于下多次声明同一个变量let:let的作用域是块作用域,块作用域可以是函数、条件判断等内部{......
  • 呼叫中心解决方案:探索AIGC(如ChatGPT)与呼叫中心的深度融合
    随着人工智能技术的发展,AI已经在诸如客户服务、数据分析、决策支持等许多领域发挥了重要作用。在这之中,将AI融入呼叫中心已成为一个日益重要的趋势。通过这种集成,不仅可以大幅提升服务效率和质量,还可以根据客户需求提供更个性化的服务。然而,这个过程并非没有挑战,如何有效实现这种......