es6-对象扩展(二)

关于原型

es6添加了__proto__属性来指向原型,__proto__大部分浏览器都部署了这个属性,但是其他环境不一定部署(node),所以es6提供了两种方法来去读和设置原型对象。

Object.setPrototypeOf()

用于设置对象的原型对象。
es5中实例和原型之间通过__proto__属性连接,但是其他环境不一定部署__proto__,所以es6提供Object.setPrototypeOf()方法来为对象设置原型。

function Person() {}
Person.prototype.name = 'uzi'
let person1 = new Person()
person1.name	// name属性从原有的原型继承
// 'uzi'
let PersonPro = {name: 'xiaohu'}	// 新的对象
Object.setPrototypeOf(person1, PersonPro)	// 把person1指向原型的指针指向PersonPro
person1.name	// name属性从新的原型继承
// 'xiaohu'

Object.getPrototypeOf()

该方法与Object.getPrototypeOf()配套,用于获取对象的原型对象。

// 上个例子中的person1的原型
Object.getPrototypeOf(person1)
// {name: "xiaohu"}

for…in与Object.keys()

二者都是遍历对象中可枚举属性,区别是for…in除遍历对象自身的属性外继承的属性也会遍历,而Object.keys()这关注对象自身的可枚举属性。

function Person(){}
Person.prototype.age = 45
let person1 = new Person()
person1.name = 'uzi'
// for..in遍历
for (let i in person1) {console.log(i)}
// name
// age
// Object.keys()遍历
Object.keys(person1)
//["name"]

Object.values()、Object.entries()

和Object.keys()一套的东西,用法相同,values遍历值,entries遍历键值对

Object.getOwnPropertyDescriptors()

es5中Object.getOwnPropertyDescriptor()方法返回对象某个属性的描述对象,而Object.getOwnPropertyDescriptors()返回对象自身所有属性(非继承属性)的描述对象。

let person = {
	name: 'uzi',
	age: 45
}
// es5中Object.getOwnPropertyDescriptor()方法
Object.getOwnPropertyDescriptor(person, 'name')
// {value: "uzi", writable: true, enumerable: true, configurable: true}
// es6中Object.getOwnPropertyDescriptors()方法
Object.getOwnPropertyDescriptors(person)
// {
//	 age: {value: 45, writable: true, enumerable: true, configurable: true}
//	 name: {value: "uzi", writable: true, enumerable: true, configurable: true}
// }

扩展运算符

扩展运算符(…)用于取出参数对象的所有可遍历属性,并将其复制到当前对象之中。

let person = {
	name: 'uzi',
	age: 45
}
let firend = {job: 'web', ...person}
console.log(firend)
// {job: "web", name: "uzi", age: 45}

可以合并两个对象

let a = {a: 11}
let b = {b: 22}
let ab = {...a, ...b}
console.log(ab)
// {a: 11, b: 22}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值