1. 获取原型[[GetPrototypeOf]]
var obj = {
a: 1,
b: 2
};
var proto = Object.getPrototypeOf(obj);
console.log(proto);
console.log(obj.__proto__);
console.log(Object.prototype);
2. 设置原型[[SetPrototypeOf]]
var obj = {
a: 1,
b: 2
};
Object.setPrototypeOf(obj, {
c: 3,
d: 4
});
console.log(obj);
3. 获取自有属性[[GetOwnProperty]]
var obj = {
a: 1,
b: 2
};
Object.setPrototypeOf(obj, {
c: 3,
d: 4
});
console.log(Object.getOwnPropertyNames(obj));
4. 获取对象的可扩展性[[IsExtensible]]
- Object.freeze(obj); // 冻结对象,不可扩展-->对象属性不可修改、不可删除、不可写、可读
- Object.seal(obj); //封闭对象-->对象属性不可修改、不可删除、不可写、可读
var obj = {
a: 1,
b: 2
};
var extensible = Object.isExtensible(obj);
console.log(extensible);
Object.freeze(obj);
var extensible2 = Object.isExtensible(obj);
console.log(extensible2);
obj.c = 5;
console.log(obj);
delete obj.a;
console.log(obj);
obj.b = 3;
for (let key in obj) {
console.log(obj[key]);
}
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]);
}
5. 禁止扩展对象
var obj = {
a: 1,
b: 2
};
Object.preventExtensions(obj);
obj.e = 3;
console.log(obj);
delete obj.b;
console.log(obj);
6. 拦截对象操作 [[DefineOwnProperty]]
Object.defineProperty();
7. 判断是否是自身属性 [[HasProperty]]
var obj = {
a: 1,
b: 2
};
console.log(obj.hasOwnProperty('b'));
8. [[Get]]
var obj = {
a: 1,
b: 2
};
console.log('b' in obj);
console.log(obj.b);
9. [[Set]]
var obj = {
a: 1,
b: 2
};
obj.a = 3;
obj['b'] = 4;
console.log(obj);
10. [[Delete]]
var obj = {
a: 1,
b: 2
};
delete obj.a;
console.log(obj);
11. [[Enumerate]]
var obj = {
a: 1,
b: 2
};
for (var key in obj) {
console.log(obj[key]);
}
12. 获取键集合[[OwnPropertyKeys]]
var obj = {
a: 1,
b: 2
};
Object.setPrototypeOf(obj, {
c: 5,
d: 6
});
console.log(Object.keys(obj));
13. 方法的调用
function test() {}
test();
14. 构造函数实例化
function Test() {}
new Test();