定义一个对象
var obj = {
a:1,
b:3
}
1. 获取原型 [[ getPrototyprOf ]]
// 以下 3 种方式都获取到了 obj 的原型,但是只有第一种是函数式方法,是 js 内置提供的方法,推荐使用第一种
console.log(Object.getPrototypeOf(obj));
console.log(obj.__proto__);
console.log(Object.prototype);
2.设置原型 [[ setPrototypeOf ]]
Object.setPrototypeOf(obj,{c:7});
console.log(obj);
3.判断是否可扩展 [[ IsExtensible ]]
// 可扩展的意思是可以给对象添加属性
let extensible = Object.isExtensible(obj);
console.log(extensible); //true
// 继续扩展一下知识
Object.freeze(obj) // 冻结
obj.d = 6; //不可新增
delete obj.a; //不可删除
obj.b = 2; //不可写,不可修改
for (var key in obj) {
console.log(obj[key]); // 可枚举
}
var extensible2 = Object.isExtensible(obj);
console.log(extensible2); //false // 不可扩展
Object.seal(obj); //封闭对象
obj.d = 6; // 不可新增
delete obj.a; //不可删除
obj.b = 2; //可写,可修改
for (var key in obj) {
console.log(obj[key]); // 可枚举
}
4.禁止扩展对象 [[ PreventExtensions ]]
Object.preventExtensions(obj);
obj.c = 5; //不可增加
console.log(obj); //{a: 1,b: 3,}
delete obj.a; //可删除
5.获取自身属性 [[ getOwnProperty]]
Object.setPrototypeOf(obj,{c:2})
console.log(Object.getOwnProperty(obj));//['a','b']
// 这里只能获取到 obj 的自有属性,会把原型链上的属性排除掉
6.判断是否是自身属性 [[HasProperty]]
console.log(obj.hasOwnProperty('a')); //true
console.log(obj.hasOwnProperty('e')); //false
Object.setPrototypeOf(obj, { c: 3 }); // 设置原型属性
console.log(obj.hasOwnProperty('c')); // false
7.拦截对象操作 [[ DefineProperty ]]
var obj2 = {};
Object.defineProperty(obj2, 'c', {
get() {
return obj2['c'];
},
set(newVal) {
obj2['c'] = newVal;
},
});
obj.c = 2;
console.log(obj2.c);
8.获取 [[ Get ]]
Object.setPrototypeOf(obj, { f: 3 });
console.log(obj.a); //1
console.log(obj.f); //3
console.log('f' in obj); // true
9.设置 [[Set]]
obj.a = 2;
obj['b'] = 5;
console.log(obj); // {a:2,b:5}
10.删除 [[Delete]]
delete obj.a;
console.log(obj); // {b: 3}
11.枚举 [[Enumerate]]
Object.setPrototypeOf(obj, { c: 2 });
for (var k in obj) {
console.log(k + ':' + obj[k]);
}
// 可以把原型链上的属性也枚举出来
12.获取键合集 [[ OwnPropertyKeys ]]
// 只能获取自有键,不能获取原型链上的键
Object.setPrototypeOf(obj, { d: 1 });
console.log(Object.keys(obj)); //['a','b']
13.调用函数
function test() {}
test();
obj.test = function () {};
obj.test();
14.实例化对象
function Test() {}
new Test();