defineProperty是用来定义或者修改对象值的属性的,通过defineProperty可以设置属性的可读可写等属性。
getOwnPropertyName可以用来获取对象上所有属性(包括不可枚举的属性)
// 定义
Object.defineProperty(Object.property, 'extend', {
writable: true, // 可写
enumerable: false, // 可枚举
configurable: true, // 可设置
value: function (o) {
// 值
// 获取o的所有属性名称
const names = Object.getOwnPropertyName(o)
for (let i = 0, len = names.length; i < len; i++) {
// 判断对象中是否已经存在属性
if (names[i] in this) continue
// 获取o中的属性设置
const desc = Object.getOwnPropertyDescriptor(o, names[i])
Object.defineProperty(this, name[i], desc)
}
}
})
// 实例
let a = {
itemA: 1
}
Object.defineProperty(a, 'itemB', {
writable: true,
enumerable: false,
configurable: true,
value: 2
})
console.log(a) // {itemA: 1, itemB: 2}
let b = {
}
b.extend(a)