ES5给Object扩展了一些静态方法,常用的有2个:
1、Object.create(prototype,[description])
作用:以指定对象为原型创建新的对象。
为新的对象指定新的属性,并对属性进行描述。
-value:指定值。
-writable:标识当前属性值是否是可修改的,默认中false。
-configurable:标识当前属性是否可以被删除,默认是fasle。
-enumerable:标识当前属性是否能用for in 枚举 默认为false。
const person = { username: 'Lily', age: '18' }
let obj = {}
obj = Object.create(person, {
sex: {
value: '男',
writable: true,
enumerable: true,
configurable: true,
}
})
obj.sex = '女'
// delete obj.sex
console.log(obj)
for (let object in obj) {
console.log(object)
}
******
2、Object.defineProperties(object,description)
作用:为指定对象定义扩展多个属性。
-get:用来获取当前属性值的回调函数。
-set:修改当前属性值的触发函数,并且实参即为修改后的值。
-存储器属性:setter,getter一个用来存值,一个用来取值。
let names = { firstName: 'Lily', lastName: 'Jack' }
Object.defineProperties(names, {
fullName: {
get: function () {
console.log('get()')
return `${this.firstName} ${this.lastName}`
},
set: function (data) {
console.log('set()')
let names = data.split(' ')
this.firstName = names[0]
this.lastName = names[1]
}
}
})
names.fullName = 'Luck Bull'
console.log(names.fullName)
console.log(names)
******
3、对象本身的get set 方法
get propertyName() 用来得到当前属性值的回调函数
set propertyName() 用来监视当前属性值变化的回调函数
let user = {
firstName: 'curry',
lastName: 'stephen',
get fullName () {
return `${this.firstName} ${this.lastName}`
},
set fullName (data) {
let users = data.split(' ')
this.firstName = users[0]
this.lastName = users[1]
}
}
console.log(user.fullName)
user.fullName = 'Luily Luck'
console.log(user.fullName)
******