Object 静态方法总结

create 创建一个对象

1 const obj = Object.create({a:1}, {b: {value: 2}})
 2 
 3 第一个参数为对象,对象为函数调用之后返回新对象的原型对象,第二个参数为对象本身的实例方法(默认不能修改,不能枚举)
 4 obj.__proto__.a === 1      // true 
 5 
 6 obj.b = 3;
 7 console.log(obj.b)      // 2
 8 
 9 //创建一个可写的,可枚举的,可配置的属性p
10 obj2 = Object.create({}, {
11   p: {
12     value: 2,       // 属性值
13     writable: true,     //  是否可以重写值
14     enumerable: true,   //是否可枚举
15     configurable: true  //是否可以修改以上几项配置
16   }
17 });
18 
19 obj2.p = 3;
20 console.log(obj2.p)     // 3
21 
22 注意: enumerable 会影响以下
23 for…in  遍历包括对象原型上属性
24 
25 Object.keys()   只能遍历自身属性
26 
27 JSON.stringify  只能序列化自身属性

defineProperty Object.defineProperty(object, prop, descriptor)定义对象属性

1 添加数据属性
 2 var obj = {};
 3 
 4 // 1.添加一个数据属性
 5 Object.defineProperty(obj, "newDataProperty", {
 6     value: 101,
 7     writable: true,
 8     enumerable: true,
 9     configurable: true
10 });
11 
12 obj.newDataProperty    // 101
13 
14 // 2.修改数据属性
15 Object.defineProperty(obj, "newDataProperty", {
16     writable:false
17 });
18 
19 //添加访问器属性
20 var obj = {};
21 
22 Object.defineProperty(obj, "newAccessorProperty", {
23     set: function (x) {
24         this.otherProperty = x;
25     },
26     get: function () {
27         return this.otherProperty;
28     },
29     enumerable: true,
30     configurable: true
31 });
32 
33 
34 注意:  1.第一个参数必须为对象
35         2.descriptor 不能同时具有 (value 或 writable 特性)(get 或 set 特性)。
36         3.configurable 为false 时,不能重新修改装饰器