一、json方法
语法:JSON.stringify(value[, replacer[, space]])
(1)value—必需, 要转换的 JavaScript 值(通常为对象或数组)
(2)replacer—可选。用于转换结果的函数或数组。
如果 replacer 为函数,则 JSON.stringify 将调用该函数,并传入每个成员的键和值。使用返回值而不是原始值。如果此函数返回 undefined,则排除成员。根对象的键是一个空字符串:""。
如果 replacer 是一个数组,则仅转换该数组中具有键值的成员。成员的转换顺序与键在数组中的顺序一样。
(3)space—可选,文本添加缩进、空格和换行符,如果 space 是一个数字,则返回值文本在每个级别缩进指定数目的空格,如果 space 大于 10,则文本缩进 10 个空格。space 也可以使用非数字,如:\t。
语法:JSON.parse(text[, reviver])
(1)text—必需, 一个有效的 JSON 字符串。
(2)reviver—可选,一个转换结果的函数, 将为对象的每个成员调用此函数。
1.JSON对象的深度克隆。方法是先JSON.stringify() 转为json字符串, 再JSON.parse() 转为json数组
2. 如果你的对象里有函数, 函数无法被拷贝下来,无法拷贝copyObj对象原型链上的属性和方法
var obj = {
x: 1,
y: {
a: 1,
b: 0,
c: [1, 2, 3]
}
};
// 相同的引用
var obj2 = obj;
console.log(obj2 == obj); //true 直接复制只是复制对象的指针,还指向同一个对象
//不同的引用
var obj3 = JSON.parse(JSON.stringify(obj));
console.log(obj3 == obj) //false 通过json方法复制后的地址不一样
console.log(obj3);
二.、jQuery.extend方法(函数用于将一个或多个对象的内容合并到目标对象)
语法:$.extend( [deep ], target, object1 [, objectN ] )
(1)deep—可选。 Boolean类型 指示是否深度合并对象,默认为false。如果该值为true,且多个对象的某个同名属性也都是对象,则该"属性对象"的属性也将进行合并。
(2)target— Object类型 目标对象,其他对象的成员属性将被附加到该对象上。
(3)object1—可选。 Object类型 第一个被合并的对象。
(4)objectN—可选。 Object类型 第N个被合并的对象。
1.如果只为$.extend()指定了一个参数,则意味着参数target被省略。此时,target就是jQuery对象本身。通过这种方式,我们可以为全局对象jQuery添加新的函数。
2.如果多个对象具有相同的属性,则后者会覆盖前者的属性值。
var obj = {
x: 1,
y: {
a: 1,
b: 0,
c: [1, 2, 3]
}
};
var obj2 = $.extend({
}, obj);
console.log(obj2 == obj) //false 复制后的地址不一样
console.log(obj2);
三.、Object.create()方法
语法:Object.create(proto, [propertiesObject])
(1)proto—必须。表示新建对象的原型对象,即该参数会被赋值到目标对象(即新对象,或说是最后返回的对象)的原型上。该参数可以是null, 对象, 函数的prototype属性 (创建空的对象时需传null , 否则会抛出TypeError异常)
(2)propertiesObject—可选。 添加到新创建对象的可枚举属性(即其自身的属性,而不是原型链上的枚举属性)对象的属性描述符以及相应的属性名称。这些属性对应Object.defineProperties()的第二个参数。
方法创建一个新对象,使用现有的对象来提供新创建的对象的proto
var obj = {
x: 1,
y: {
a: 1,
b: 0,
c: [1, 2, 3]