2 - 操作对象的14种方法

236 阅读2分钟

1. 获取原型[[GetPrototypeOf]]

var obj = {
  a: 1,
  b: 2
};
// 获取原型[[GetPrototypeOf]]
var proto = Object.getPrototypeOf(obj);
console.log(proto);
console.log(obj.__proto__);
console.log(Object.prototype);

2. 设置原型[[SetPrototypeOf]]

var obj = {
  a: 1,
  b: 2
};
//在obj的原型上增加c、d属性
Object.setPrototypeOf(obj, {
  c: 3,
  d: 4
});
console.log(obj); //{a: 1, b: 2}

3. 获取自有属性[[GetOwnProperty]]

var obj = {
  a: 1,
  b: 2
};
//在obj的原型上增加c、d属性
Object.setPrototypeOf(obj, {
  c: 3,
  d: 4
});
console.log(Object.getOwnPropertyNames(obj)); // ["a", "b"]

4. 获取对象的可扩展性[[IsExtensible]]

  1. Object.freeze(obj); // 冻结对象,不可扩展-->对象属性不可修改、不可删除、不可写、可读
  2. Object.seal(obj); //封闭对象-->对象属性不可修改、不可删除、不可写、可读
var obj = {
  a: 1,
  b: 2
};
var extensible = Object.isExtensible(obj);
console.log(extensible); //true

//冻结对象,不可扩展-->对象属性不可修改、不可删除、不可写、可读
Object.freeze(obj);
var extensible2 = Object.isExtensible(obj);
console.log(extensible2); //false
obj.c = 5; //不可修改
console.log(obj);

delete obj.a; //不可删除
console.log(obj);

obj.b = 3; //不可写

//可读
for (let key in obj) {
  console.log(obj[key]); // 1 2 3 4
}

//封闭对象-->对象属性不可修改、不可删除
Object.seal(obj); //封闭对象

obj.c = 5; //不可修改
console.log(obj);

delete obj.a; //不可删除
console.log(obj);

obj.b = 3; //不可写
//可读
for (let key in obj) {
  console.log(obj[key]); // 1 2 3 4
}

5. 禁止扩展对象

var obj = {
  a: 1,
  b: 2
};
Object.preventExtensions(obj);

obj.e = 3; //禁止增加属性
console.log(obj); // {a: 1, b: 2}

delete obj.b; //可删除属性
console.log(obj); // {a: 1}

6. 拦截对象操作 [[DefineOwnProperty]]

Object.defineProperty();

7. 判断是否是自身属性 [[HasProperty]]

var obj = {
  a: 1,
  b: 2
};
console.log(obj.hasOwnProperty('b')); //true

8. [[Get]]

var obj = {
  a: 1,
  b: 2
};
console.log('b' in obj); // true
console.log(obj.b); //2

9. [[Set]]

var obj = {
  a: 1,
  b: 2
};
obj.a = 3;
obj['b'] = 4;
console.log(obj); //{a: 3, b: 4}

10. [[Delete]]

var obj = {
  a: 1,
  b: 2
};
delete obj.a;
console.log(obj); //{b: 2}

11. [[Enumerate]]

var obj = {
  a: 1,
  b: 2
};
for (var key in obj) {
  console.log(obj[key]); // 1 2
}

12. 获取键集合[[OwnPropertyKeys]]

var obj = {
  a: 1,
  b: 2
};
Object.setPrototypeOf(obj, {
  c: 5,
  d: 6
});
console.log(Object.keys(obj)); // ["a", "b"]

13. 方法的调用

function test() {}
test();

14. 构造函数实例化

function Test() {}
new Test();