• 首页
  • 作文
  • 散文
  • 故事
  • 古诗
  • 短文
  • 语录
  • 写作
  • 诗歌
  • 百科
  • 知识
  • 首页
  • 作文
  • 散文
  • 故事
  • 古诗
  • 短文
  • 语录
  • 写作
  • 诗歌
  • 百科
  • 知识
首页 » 生活常识 » js哪些方法可以实现对象拷贝(JavaScript怎样进行真正有效的对象拷贝)

js哪些方法可以实现对象拷贝(JavaScript怎样进行真正有效的对象拷贝)

分类:生活常识 日期:2022-09-03 20:42 浏览:6 次

1.JavaScript怎样进行真正有效的对象拷贝

有效的对象拷贝应该是指深拷贝。

浅拷贝 : 就是两个js 对象指向同一块内存地址,所以当obj1 ,obj2指向obj3的时候,一旦其中一个改变,其他的便会改变!

深拷贝:就是重新复制一块内存,这样就不会互相影响。

有些时候我们定义一个数组,把这个数据赋值给跟多对象数组中的一个字段,当我们改变对象数组中的该字段的时候,我们会把原来的数组也改变了,这样就会引起其他数组对象中的对应的字段改变,这不是我们想要的。

这个时候我们会用到深拷贝。

深拷贝的方法:

var deepCopy = function(source)

{

var result;

(source instanceof Array) ? (result = []) : (result = {});

for (var key in source) {

result[key] = (typeof source[key]==='object') ? deepCopy(source[key]) : source[key];

}

return result;

}

2.怎么拷贝一个js函数或者对象的方法

||Object.prototype.clone = function() {

// Handle null or undefined or function

if (null == this || "object" != typeof this)

return this;

// Handle the 3 simple types, Number and String and Boolean

if(this instanceof Number || this instanceof String || this instanceof Boolean)

return this.valueOf();

// Handle Date

if (this instanceof Date) {

var copy = new Date();

copy.setTime(this.getTime());

return copy;

}

// Handle Array or Object

if (this instanceof Object || this instanceof Array) {

var copy = (this instanceof Array)?[]:{};

for (var attr in this) {

if (this.hasOwnProperty(attr))

copy[attr] = this[attr]?this[attr].clone():this[attr];

}

return copy;

}

throw new Error("Unable to clone obj! Its type isn't supported.");

}

function a() {

alert("aaaaa");

}

var b = a.clone();

b();

alert(b === a);

3.怎么拷贝一个js函数或者对象的方法

||Object.prototype.clone = function() { // Handle null or undefined or function if (null == this || "object" != typeof this) return this; // Handle the 3 simple types, Number and String and Boolean if(this instanceof Number || this instanceof String || this instanceof Boolean) return this.valueOf(); // Handle Date if (this instanceof Date) { var copy = new Date(); copy.setTime(this.getTime()); return copy; } // Handle Array or Object if (this instanceof Object || this instanceof Array) { var copy = (this instanceof Array)?[]:{}; for (var attr in this) { if (this.hasOwnProperty(attr)) copy[attr] = this[attr]?this[attr].clone():this[attr]; } return copy; } throw new Error("Unable to clone obj! Its type isn't supported.");}function a() { alert("aaaaa");}var b = a.clone();b();alert(b === a);。

4.实现函数clone,可以对js对象复制

要实现深复制有很多办法,比如最简单的办法有:var cloneObj = JSON.parse(JSON.stringify(obj)); 上面这种方法好处是非常简单易用,但是坏处也显而易见,这会抛弃对象的constructor,也就是深复制之后,无论这个对象原本的构造函数是什么,在深复制之后都会变成Object。

另外诸如RegExp对象是无法通过这种方式深复制的。所以这里我将介绍一种,我自认为很优美的深复制方法,当然可能也存在问题。

如果你发现了我的实现方法有什么问题,请及时让我知道~ 先决条件:1. 对于任何对象,它可能的类型有Boolean, Number, Date, String, RegExp, Array 以及 Object(所有自定义的对象全都继承于Object)2. 我们必须保留对象的构造函数信息(从而使新对象可以使用定义在prototype上的函数) 最重要的一个函数:Object.prototype.clone = function () { var Constructor = this.constructor; var obj = new Constructor(); for (var attr in this) { if (this.hasOwnProperty(attr)) { if (typeof(this[attr]) !== "function") { if (this[attr] === null) { obj[attr] = null; } else { obj[attr] = this[attr].clone(); } } } } return obj; }; 定义在Object.prototype上的clone()函数是整个方法的核心,对于任意一个非js预定义的对象,都会调用这个函数。而对于所有js预定义的对象,如Number,Array等,我们就要实现一个辅助clone()函数来实现完整的克隆过程:/* Method of Array*/ Array.prototype.clone = function () { var thisArr = this.valueOf(); var newArr = []; for (var i=0; i<thisArr.length; i++) { newArr.push(thisArr[i].clone()); } return newArr; };/* Method of Boolean, Number, String*/ Boolean.prototype.clone = function() { return this.valueOf(); }; Number.prototype.clone = function() { return this.valueOf(); }; String.prototype.clone = function() { return this.valueOf(); };/* Method of Date*/ Date.prototype.clone = function() { return new Date(this.valueOf()); };/* Method of RegExp*/ RegExp.prototype.clone = function() { var pattern = this.valueOf(); var flags = ''; flags += pattern.global ? 'g' : ''; flags += pattern.ignoreCase ? 'i' : ''; flags += pattern.multiline ? 'm' : ''; return new RegExp(pattern.source, flags); }; 可能直接定义在预定义对象的方法上,让人感觉会有些问题。

但在我看来这是一种优美的实现方式。同时我也在开发一个插件,主要的思想也就是扩展预定义对象的方法。

这个插件叫JustJS(Github项目地址) 有以下一些特性:1. 同时支持Web前端和node.js使用。2. 直接对预定义对象的方法进行扩展3. 使用 J(function(){。

}) 语句块,决不污染全局命名空间。目前只写了一小部分,同时也写了些简单的文档,有兴趣的同学可以看一下,也可以加入我,Fork我的项目,喜欢的同学还可以给Star!。

5.js怎么克隆对象

这题的意思是把一个对象中的内容一级一级的复制到另外一个对象中。用for(var i in obj)的方式就可以了。

至于类型,js虽然是弱类型,但其实是有类型的,如数字类型,就是Number,对象类型就是Object,String,Date,Array,Boolean,Function等,然要判断对象的类型也很简单,如:

var a = 2;

a.constructor == Number;// 判断是否为数值

a.constructor == String;// 判断是否为字符串 a = "test"

a.constructor == Date;// 判断是否为日期 a = new Date()

a.constructor == Array;// 判断是否为数组 a = [1,"2",true]

a.constructor == Boolean;// 判断是否为布尔型 a = true

a.constructor == Object;// 判断是否为对象 a = {}

a.constructor == Function;// 判断是否为方法类型 a = function(){}

6.如何用javascript实现拷贝,粘贴的功能

拷贝可以使用:对象.createTextRange().execCommand("copy")命令,你可以用:window.clipboardData.setData("text",内容的来源)这里内容的来源例如要取得文本框ID为y里的文本复制到剪切板,这里写y.value粘贴其实就是目标对象的value属性=y.value剪切是以选择为基础的,先必须建立选择区域,如有个文本框ID为a,要剪切里面的文本需要:a.createTextRange().execCommand("cut")来完成剪切。

全选,如有个文本框ID为b,则全选的话只需b.select()即可。

7.javascript有哪些方法能够实现继承

JavaScript中要实现继承,其实就是实现三层含义:1、子类的实例可以共享父类的方法;2、子类可以覆盖父类的方法或者扩展新的方法;3、子类和父类都是子类实例的“类型”。

JavaScript中,并不直接从语法上支持继承,但是可以通过模拟的方法来实现继承,以下是关于实现继承的几种方法的总结:1、构造继承法2、原型继承法3、实例继承法4、拷贝继承法1、构造继承法:在子类中执行父类的构造函数。 12、原型继承法:JavaScript是一种基于原型的语言。

要了解什么是“原型继承法”,先了解一下prototype的特性:prototype的最大特性是能够让对象实例共享原型对象的属性,因此如果把某个对象作为一个类型的原型,那么我们说这个类型的所有实例都一这个对象为原型。这个时候,实际上这个对象的类型也可以作为那些以这个对象为原型的实例的类型。

假如:Point类的对象作为Point2D类型的原型(Point2D.prototype = new Point(2)),那么说Point2D的所有实例都是以Point类的对象为原型。此时,实际上Point类就可以作为Point2D类型的对象的类型(相当于Point2D类型“继承”了Point类型)。

见例:1 <script LANGUAGE="JavaScript"> 2 方法,可以被继承14 {15 return this.dimension*2;16 }1718 function Point2D(x,y) //定义一个Point2D类19 {20 this.x = x;21 this.y = y;22 }2324 Point2D.prototype = new Point(2); //运行“原型继承法”使Point2D继承Point2526 function Point3D(x,y,z) //定义Point3D类27 {28 this.x = x;29 this.y = y;30 this.z = z;31 }3233 Point3D.prototype = new Point(3); //Point3D继承Point类3435 var p2 = new Point2D(1,2); //构造一个Point2D对象3637 var p3 = new Point3D(1,2,3); //构造一个Point3D对象3839 dwn(p2.dimension); //240 dwn(p3.dimension); //341 dwn(p2.distance()); //4 可以继承静态方法42 dwn(p3.distance()); //6 可以继承静态方法<。

8.js如何复制一个对象的值

可以利用JS中的for in语法进行处理,具体如下:

//要复制的原对象

var destobj={ colkey: "col", colsinfo: "NameList" }

//复制的目标对象

var myobj=new Object();

for(var om in myobj)

{

var name=om;//属性名称

var value=destobj[om];//属性对应的值

myobj[name]=destobj[om];

}

9.js中如何复制一个对象并获取其所有属性和属性对应的值

如果是使用了 JQ EXTJS 的话本身就有 对象克隆的 函数库可以使用 如 extjs 使用

ext.ux.util.clone()

没有用这些的话 可以自己写一个 克隆函数 网上有资源 比如

function deepClone(obj){ var result={},oClass=isClass(obj);

// if(oClass==="Object"){

// result={};

// }else if(oClass==="Array"){

// result=[];

// }else{

// return obj;

// }

for(key in obj){

var copy=obj[key];

if(isClass(copy)=="Object"){

result[key]=arguments.callee(copy);

}else if(isClass(copy)=="Array"){

result[key]=arguments.callee(copy);

}else{

result[key]=obj[key];

}

}

return result;

}

function isClass(o){

if(o===null) return "Null";

if(o===undefined) return "Undefined";

return Object.prototype.toString.call(o).slice(8,-1);

}或者参考 extjs 的方法

function(o) {

if(!o || 'object' !== typeof o) { return o; }

if('function' === typeof o.clone) { return o.clone(); }

var c = '[object array]' === object.prototype.tostring.call(o) ? [] : {};

var p, v;

for(p in o) {

if(o.hasownproperty(p)) { v = o[p];

if(v && 'object' === typeof v) {

c[p] = ext.ux.util.clone(v);

} else {

c[p] = v;

}

}

}

return c;};

js哪些方法可以实现对象拷贝

相关推荐:
  • 平行四边形有几条对称轴呢?(平行四边形的对称轴是几条)
  • 父亲节是什么时间?
  • 肉粽子的肉怎么腌制好吃视频(腊八蒜怎么腌制又绿又好吃)
  • 按图索骥的成语的主人公?(按图索骥的成语故事)
  • 五岭逶迤腾细浪乌蒙磅礴走泥丸这句诗所表达的情感是?
上一篇:图论树(知识树的画法,详细讲一下树型,表格型的画法~最好附图,) 下一篇:信友典故(诚信成语典故正反面教材故事简短一点)

相关推荐

平行四边形有几条对称轴呢?(平行四边形的对称轴是几条)
父亲节是什么时间?
肉粽子的肉怎么腌制好吃视频(腊八蒜怎么腌制又绿又好吃)
按图索骥的成语的主人公?(按图索骥的成语故事)
五岭逶迤腾细浪乌蒙磅礴走泥丸这句诗所表达的情感是?
彩虹争霸赛报名能取消吗
北约的成员国都有哪些国家(北约的成员有哪些国家)
江南四大才子哪个朝代的(江南四大才子小品视频)
2020年国家法定节假日高速免费时间
人力资源管理6大模块是什么(人力资源管理6大模块分别是什么)
潮流时尚 写作素材 创新创业
生活常识 策划方案 安全知识
自考专业 家居生活 三农创业
励志故事 时尚穿搭 星座知识
热门分类

声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
 蜀ICP备2020033479号-4  Copyright © 2016  学习鸟. 页面生成时间:4.046秒

返回顶部