静态属性
1. 构造函数的静态属性
深拷贝不会拷贝构造函数的静态属性。静态属性是定义在构造函数上的属性,而不是定义在实例上的属性。深拷贝只会复制对象的实例属性,而不会复制构造函数的静态属性。
function MyClass() {
this.instanceProperty = 'instance';
}
MyClass.staticProperty = 'static';
const obj = new MyClass();
const deepCopy = JSON.parse(JSON.stringify(obj));
console.log(deepCopy.instanceProperty); *//* 输出 *'instance'*
console.log(deepCopy.staticProperty); *//* 输出 *undefined*
在上面的示例中,我们定义了一个构造函数MyClass,其中包含一个实例属性instanceProperty和一个静态属性staticProperty。然后我们创建了一个构造函数的实例obj,并对其进行深拷贝。深拷贝后的对象deepCopy只包含了实例属性instanceProperty,而没有静态属性staticProperty。这是因为深拷贝只复制对象的实例属性,而不复制构造函数的静态属性。
2. 类上的静态属性
深拷贝不会拷贝类上的静态属性。静态属性是指定义在类上的属性,而不是定义在实例上的属性。深拷贝只会复制对象的实例属性,而不会复制类的静态属性。
class MyClass {
static staticProperty = 'static';
instanceProperty = 'instance';
}
const obj = new MyClass();
const deepCopy = JSON.parse(JSON.stringify(obj));
console.log(deepCopy.instanceProperty); *//* 输出 *'instance'*
console.log(deepCopy.staticProperty); *//* 输出 *undefined*
在上面的示例中,我们定义了一个类MyClass,其中包含一个静态属性staticProperty和一个实例属性instanceProperty。然后我们创建了一个类的实例obj,并对其进行深拷贝。深拷贝后的对象deepCopy只包含了实例属性instanceProperty,而没有静态属性staticProperty。这是因为深拷贝只复制对象的实例属性,而不复制类的静态属性。
私有属性
1. Object的私有属性
深拷贝会拷贝对象的私有属性,确切的说,Object没有私有属性和方法,所有属性和方法都是公有的。
const obj = { privateProperty: 'private', publicProperty: 'public', };
const deepCopy = JSON.parse(JSON.stringify(obj));
console.log(deepCopy.privateProperty); // 输出 'private'
console.log(deepCopy.publicProperty); // 输出 'public'
在上面的示例中,我们使用JSON.stringify将原始对象转换为字符串,然后使用JSON.parse将字符串转换回对象,这样就实现了深拷贝。深拷贝后的对象deepCopy包含了原始对象obj的所有属性,包括私有属性privateProperty和公有属性publicProperty。
2. 构造函数的私有属性
深拷贝不会拷贝构造函数的私有属性。私有属性是指定义在构造函数内部的属性,只能在构造函数内部访问。深拷贝只会复制对象的实例属性,而不会复制构造函数的私有属性。
function MyClass() {
const privateProperty = 'private';
this.instanceProperty = 'instance';
}
const obj = new MyClass();
const deepCopy = JSON.parse(JSON.stringify(obj));
console.log(deepCopy.instanceProperty); // 输出 'instance'
console.log(deepCopy.privateProperty); // 输出 undefined
在上面的示例中,我们定义了一个构造函数MyClass,其中包含一个私有属性privateProperty和一个实例属性instanceProperty。然后我们创建了一个构造函数的实例obj,并对其进行深拷贝。深拷贝后的对象deepCopy只包含了实例属性instanceProperty,而没有私有属性privateProperty。这是因为深拷贝只复制对象的实例属性,而不复制构造函数的私有属性。
3. 类的私有属性
深拷贝不会拷贝类的私有属性。私有属性是指定义在类内部的属性,只能在类内部访问。深拷贝只会复制对象的实例属性,而不会复制类的私有属性。
class MyClass {
#privateProperty = 'private';
instanceProperty = 'instance';
}
const obj = new MyClass();
const deepCopy = JSON.parse(JSON.stringify(obj));
console.log(deepCopy.instanceProperty); // 输出 'instance'
console.log(deepCopy.#privateProperty); // 报错,私有属性无法访问
在上面的示例中,我们定义了一个类MyClass,其中包含一个私有属性#privateProperty和一个实例属性instanceProperty。然后我们创建了一个类的实例obj,并对其进行深拷贝。深拷贝后的对象deepCopy只包含了实例属性instanceProperty,而没有私有属性#privateProperty。这是因为深拷贝只复制对象的实例属性,而不复制类的私有属性。