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 时,不能重新修改装饰器