关于Object的那些事

Object.create(proto, [propertiesObject])

以指定对象为原型创建新的对象

  • 参数:
    • proto — 表示新建对象的原型对象,即该参数会被赋值到的目标对象,可以传空(null),但是不能不传,否则会报错
    • propertiesObject — 添加到新创建对象的可枚举属性,可选
	var obj = {name: '南瓜', sex: 0}
	var obj2 = object.create(obj, {age: {value: 18}})
	obj2.age = 18 //不可做任何操作,原因可看Object.definePrototype
	//obj2继承了obj,所以obj2有obj的属性

Object.hasOwnPrototype(prop)

判断是否是自有属性,而不是继承属性

	var obj = {name: '南瓜'}
	var obj2 = object.create(obj)
	obj2.age = '18'
	console.log(obj2.hasOwnPrototype('age')) //true
	console.log(obj2.hasOwnPrototype('name')) //false
	//返回的是Boolean值

Object.definePrototype(obj, prop, descriptor)

在一个对象上定义一个新属性,或者修改一个已经存在的属性,并返回这个对象

  • 参数:
    • obj — 需要定义属性的对象
    • prop — 需被定义或修改的属性名
    • descript — 需被定义或修改的属性的描述符
	var obj = {name: '南瓜'}
	object.definePrototype(obj, 'age', {
		value: 18,
		writable: true, //是否可写
		enumerable: true, //是否可枚举(是否可用for循环等)
		configurable: true, //是否可操作(比如删除)
	})
	object.definePrototype(obj, 'age', {
		value: 18,
	})
	//只设置一个value值,其他3个配置即为false
	object.definePrototype(obj, 'age', {
		set: function(oldValue) {
			value = oldValue;
		},
		get: function() {
			return value 
		}
	})
	//此方法可以实现数据的双向绑定(vue3.0以下是通过这个实现的)

Object.keys(obj)

返回该对象的所有属性名(一个表示给定对象的所有可枚举属性的字符串数组)

	var obj = {name: '南瓜', age: 18, sex: 0}
	Object.keys(obj)
	//['name', 'age', 'sex']

Object.values(obj)

返回该对象的所有属性值(一个包含对象自身的所有可枚举属性值的数组)

	var obj = {name: '南瓜', age: 18, sex: 0}
	Object.values(obj)
	//['南瓜', 18, 0]

Object.assign(target, …sources)

拷贝对象(将所有可枚举属性的值从一个或多个源对象复制到目标对象),如果目标对象中的属性具有相同的键,则属性将被源对象中的属性覆盖。后面的源对象的属性将类似地覆盖前面的源对象的属性
该属性只能实现浅拷贝,无法实现深拷贝

  • 参数:
    • target— 目标对象
    • sources— 源对象
	var obj = {a: 1, b: 2}
	var obj2 = {b: 3, c: 4}
	Object.assign(obj, obj2)
	//obj = {a: 1, b: 3, c: 4} 返回目标对象

Object.getOwnPropertyDescriptors(obj)

返回指定对象所有自身属性(非继承属性)的描述对象
通过这个方法可以解决 Object.assign() 无法正确拷贝 get 属性和 set 属性的问题 (Object.getOwnPropertyDescriptors 方法配合 Object.defineProperties 方法就可以实现正确拷贝)

	var obj = {name: '南瓜'}
	var obj2 = object.create(obj)
	obj2.age = '18'
	Object.getOwnPropertyDescriptors(obj2)
	//age: {value: 18, writable: true, enumerable: true, configurable: true}

未完待续。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值