Object

Object构造函数的属性

Object.length 值为1。

获取一个对象的长度

对象的长度不能用.length获取,用js原生的Object.key可以获取到

let obj = {
    name:'希希',
    age:'18',
};
var arr = Object.keys(obj);
console.log(arr); // ['name', 'age']
console.log(arr.length); //2

Object构造函数的方法

1、Object.assign() 

通过复制一个或多个对象来创建一个新的对象。

Object.assign(target, ...sources)

参数:

    target 目标对象

    sources 源对象

返回值:

    目标对象

示例:

var obj = { a:1 };
var copy = Object.assign({},obj);
console.log(JSON.stringify(obj)); //{"a":1}
console.log(JSON.stringify(copy)); //{"a":1}

copy = Object.assign({b:2,c:3},obj);
console.log(JSON.stringify(copy)); //{"b":2,"c":3,"a":1}
console.log(JSON.stringify(obj));  //{"a":1}

obj.a=4;
console.log(JSON.stringify(obj)); //{"a":4}
console.log(JSON.stringify(copy));//{"b":2,"c":3,"a":1}

针对深拷贝,需要使用其他方法,因为 Object.assign()拷贝的是属性值。假如源对象的属性值是一个指向对象的引用,它也只拷贝那个引用值。

var obj1 = { a:0,b:{ c:0 } };
var copy1 = Object.assign({}, obj1);
console.log(JSON.stringify(copy1)); // {"a":0,"b":{"c":0}}
console.log(JSON.stringify(obj1)); // {"a":0,"b":{"c":0}}

obj1.b.c=1;
console.log(JSON.stringify(obj1)); // {"a":0,"b":{"c":1}}
console.log(JSON.stringify(copy1));  // {"a":0,"b":{"c":1}}

obj1.a=1;
console.log(JSON.stringify(obj1));  // {"a":1,"b":{"c":1}}
console.log(JSON.stringify(copy1));  // {"a":0,"b":{"c":1}}

copy1.b.c=2;
console.log(JSON.stringify(copy1));  // {"a":0,"b":{"c":2}}
console.log(JSON.stringify(obj1)); // {"a":1,"b":{"c":2}}

copy1.a=2;
console.log(JSON.stringify(obj1)); // {"a":1,"b":{"c":2}}
console.log(JSON.stringify(copy1)); //{"a":2,"b":{"c":2}}

合并对象,当并具有相同属性的对象时,属性被后续参数中的相同属性的其他对象覆盖

var o1 = {a:1};
var o2 = {b:1};
var o3 = {c:1};
obj = Object.assign(o1,o2,o3);
console.log(JSON.stringify(obj)); // {"a":1,"b":1,"c":1}
console.log(JSON.stringify(o1));  // {"a":1,"b":1,"c":1}
console.log(JSON.stringify(o2));  // {"b":1}
console.log(JSON.stringify(o3));  // {"c":1}

var b1={a:2,b:2,c:3};
var b2 = {b:3,c:4};
var b3 = {c:5};
obj=Object.assign({},b1,b2,b3); // {a: 2, b: 3, c: 5}
console.log(JSON.stringify(obj)); //{"a":2,"b":3,"c":5}

 

2、Object.create()

创建具有指定的原型,并可选择包含指定的属性对象。

Object.create(proto[, propertiesObject])

参数:

    proto 新创建对象的原型对象。

    propertiesObject 可选。如果没有指定为 undefined,则是要添加到新创建对象的可枚举属性(即其自身定义的属性,而不是其原型链上的枚举属性)对象的属性描述符以及相应的属性名称。这些属性对应Object.defineProperties()的第二个参数。

返回值:

    在指定原型对象上添加新属性后的对象。

例外:

    如果proto参数不是 null 或一个对象,则抛出一个 TypeError 异常。

let newPerson = Object.create({}, {
    height: {
        value: 188,
        writable: false,
    },
    skin: {
        value: 'yellow',
    }
});
newPerson //{height: 188, skin: "yellow"}

 

3、Object.defineProperty()

 直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。

Object.defineProperty(obj, prop, descriptor)

参数:

  obj  要在其上定义属性的对象。

  prop 要定义或修改的属性的名称。

  descriptor 将被定义或修改的属性描述符。

返回值:

  被传递给函数的对象。

 

  4、Object.defineProperties()

 直接在一个对象上定义新的属性或修改现有属性,并返回该对象。

Object.defineProperties(obj, props)

 

posted @ 2017-12-25 14:06  biubiu小希希  阅读(270)  评论(0编辑  收藏  举报