数码资讯
javascript的深层复制
在Javascript中,所有的对象变量都分配给地址,有些学生可能会问对象对象是什么: 复制代码代码如下所示: Typeof(真正的) / /布尔 Typeof(1) / / Typeof(1) / /字符串 Typeof({ }) / /对象 Typeof({ }) / /对象 Typeof(空)
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
在Javascript中,所有的对象变量都分配给地址,有些学生可能会问对象对象是什么:
复制代码代码如下所示:
Typeof(真正的) / /布尔
Typeof(1) / /
Typeof(1) / /字符串
Typeof({ }) / /对象
Typeof({ }) / /对象
Typeof(空) / /对象
Typeof(function(){ }) / / 功能
所以事实上,我们有一个深拷贝的主要对象是对象对象,非对象对象只要直接正常赋值就好了:
遍历对象的所有属性,
如果此属性为对象
如果对象对象是特殊的,那么它是一个数组,然后创建一个新数组并深入复制数组中的元素。
如果对象对象是非数组对象,则递归地调用深层复制方法。
如果不是对象
以下是我的认识:
复制代码代码如下所示:
(object.prototype.deepcopy =功能){
Var obj,我;
obj = { };
对于(ATTR本){
如果(this.hasownproperty(ATTR)){
如果(typeof(这{属性})=对象){
如果(这{属性} = null){
obj {属性} = null;
}
如果(Object.prototype.toString.call(这{属性})={ }对象数组){
obj {属性} = { };
为(i = 0;i <这{属性}。长度;i++){
obj {属性}。推(这{属性} {我}。DeepCopy());
}
{人}
obj { } = {属性}这吸引了DeepCopy();
}
{人}
obj { } = {属性}这个属性;
}
}
}
返回对象;
};
如果浏览器支持ECMAscript 5,为了复制对象属性的所有属性,你可以使用它
复制代码代码如下所示:
object.defineproperty(对象,属性,Object.getOwnPropertyDescriptor(这个,ATTR));
更换
复制代码代码如下所示:
obj { } = {属性}这个属性;
实施这一方法直接对Object.prototype的优势是,所有对象继承的方法。糟糕的是,一些图书馆还重写的对象的对象,所以有时会发生冲突,这是要注意的。具体的使用方法如下:
复制代码代码如下所示:
object.prototype.deepcopy =函数(){…}
var = x:1 };
var;
var c = a.deepcopy();
内= 2;
b.x = 3;
console.log(内); / / 3
console.log(b.x); / / 3
console.log(C.X); / / 1
以上是关于深拷贝的解释,但是今天,既然我们已经谈到了深层复制,我们希望有浅拷贝,所以让我们简要地总结它们之间的异同。
浅拷贝(阴影克隆):只有复制对象的基本类型,对象类型,仍然属于原始引用。
深层复制(深层克隆):复制对象的基本类并不严格,而且复制原始对象中的对象。也就是说,新对象是完全生成的。
复制代码代码如下所示:
Typeof(真正的) / /布尔
Typeof(1) / /
Typeof(1) / /字符串
Typeof({ }) / /对象
Typeof({ }) / /对象
Typeof(空) / /对象
Typeof(function(){ }) / / 功能
所以事实上,我们有一个深拷贝的主要对象是对象对象,非对象对象只要直接正常赋值就好了:
遍历对象的所有属性,
如果此属性为对象
如果对象对象是特殊的,那么它是一个数组,然后创建一个新数组并深入复制数组中的元素。
如果对象对象是非数组对象,则递归地调用深层复制方法。
如果不是对象
以下是我的认识:
复制代码代码如下所示:
(object.prototype.deepcopy =功能){
Var obj,我;
obj = { };
对于(ATTR本){
如果(this.hasownproperty(ATTR)){
如果(typeof(这{属性})=对象){
如果(这{属性} = null){
obj {属性} = null;
}
如果(Object.prototype.toString.call(这{属性})={ }对象数组){
obj {属性} = { };
为(i = 0;i <这{属性}。长度;i++){
obj {属性}。推(这{属性} {我}。DeepCopy());
}
{人}
obj { } = {属性}这吸引了DeepCopy();
}
{人}
obj { } = {属性}这个属性;
}
}
}
返回对象;
};
如果浏览器支持ECMAscript 5,为了复制对象属性的所有属性,你可以使用它
复制代码代码如下所示:
object.defineproperty(对象,属性,Object.getOwnPropertyDescriptor(这个,ATTR));
更换
复制代码代码如下所示:
obj { } = {属性}这个属性;
实施这一方法直接对Object.prototype的优势是,所有对象继承的方法。糟糕的是,一些图书馆还重写的对象的对象,所以有时会发生冲突,这是要注意的。具体的使用方法如下:
复制代码代码如下所示:
object.prototype.deepcopy =函数(){…}
var = x:1 };
var;
var c = a.deepcopy();
内= 2;
b.x = 3;
console.log(内); / / 3
console.log(b.x); / / 3
console.log(C.X); / / 1
以上是关于深拷贝的解释,但是今天,既然我们已经谈到了深层复制,我们希望有浅拷贝,所以让我们简要地总结它们之间的异同。
浅拷贝(阴影克隆):只有复制对象的基本类型,对象类型,仍然属于原始引用。
深层复制(深层克隆):复制对象的基本类并不严格,而且复制原始对象中的对象。也就是说,新对象是完全生成的。
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。