对象Object方法学习记录(一)

一、 Object.assign()

		拷贝一个对象属性到另一个对象,有相同属性则会覆盖,后面覆盖前面的属性
		 拷贝对象中的普通数据类型,不可拷贝引用类型,如对象中的对象
		即拷贝普通数据类型:改变原对象和新对象的值不会相互影响
		不可深拷贝:即为拷贝对象中的对象时,改变原对象的该值,新对象也会受影响,只是拷贝了原对象的引用地址而已,所以会相互影响
            var target = {a:1,b:2}
			var obj2 = {a:5, c:2}
			var obj3 = {d:5}
			var obj4 = {a:10, b:{c:'你好'}}
			Object.assign(target, obj2, obj3)
			console.log('target', target) // {a:5,b:2,c:2,d:5}
			var target2 = Object.assign({}, obj4)
			console.log('不可深拷贝', target2) // {a:10, b:{c:'你好'}}
			// 深拷贝,枚举数据和引用数据改变相互都不受影响
			var target3 = JSON.parse(JSON.stringify(obj4))
			obj4.b.c = 'Hello'
			obj4.a = 20
			console.log('target3',target3) // {a:10, b:{c:'你好'}}
			console.log('obj4',obj4) // {a:20, b:{c:'Hello'}}

**

二、Object.create()

创建一个新对象

**

            var o = Object.create(null)
			console.log('创建无原型对象o',o) // {}
			var o1 = {}
			// 字面量创建对象方式相当于下面这种方式
			var o2 = Object.create(Object.prototype)
			console.log('创建原型对象o',o2)
			// 以空对象为原型,创建带有n属性的新对象,且创建的属性不可写,不可枚举,不可配置(默认都为false)
			var o3 = Object.create({},{n: {value: 20}})
		    o3.n = 100 // 不可改
			console.log('以空对象为原型,创建带有n属性的新对象', o3) // {n:20}
			// 创建一个可写可枚举,可配置的对象
			var o4 = Object.create({},{
				p: {
					value:20,
					writable: true,
					enumerable: true,
					configurable: true
				}
			})
			o4.p = 50
			console.log('o4', o4) // {p:50}

**

三、Object.defineProperty()

定义一个对象的一个属性和修改一个对象的一个属性

**
Object.defineProperties()定义一个对象的多个属性和修改一个对象的多个属性

           var d = {}
			Object.defineProperty(d, 'name', {
				value: '张三',
				writable: true,
				enumerable: true,
				configurable: true
			})
			console.log('ddd', d) // {name: '张三'}

**

四、Object.getOwnPropertyDescriptor()

返回指定对象上一个自有属性对应的属性描述符

**
Object.getOwnPropertyDescriptors() 获取对象所有属性的描述符

            const object2 = {
			  p: 42
			}			
			const descriptor1 = Object.getOwnPropertyDescriptor(object2, 'p')			
			console.log(descriptor1.configurable) // true
			// 区别于Object.assign()只能拷贝对象自身枚举属性,无法拷贝原型和属性描述
			var g1 = {a:1,b:{c:'你好'}}
			var g2 = Object.create(
			   // 返回指定对象的原型
			  Object.getPrototypeOf(g1),
			  Object.getOwnPropertyDescriptors(g1)
			)
			console.log('g22', g2) // {a:1,b:{c:'你好'}}
			var g3 = Object.assign({},g1)
			console.log('g33', g3) // {a:1,b:{c:'你好'}}

**

五、Object.freeze()

**
冻结一个对象或者数组,使之不可被修改,不能添加属性和删除属性,不可修改可枚举性,可配置性,可写性

            var f0 = {
				a:1,
				b:20
			}
			var f = Object.freeze(f0)
			console.log(f===f0) // true
			console.log(Object.isFrozen(f)) // true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值