js对象操作的14种方法

14 篇文章 0 订阅

定义一个对象

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();
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值