-------- | -----
电脑 | $1600`
//照着下面的代码敲一遍就能熟悉各个方法的使用了
//知识点密度高,需要放慢速度来理解记忆
//涉及十种Object方法, 分别如下
//Object.getOwnPropertyDescriptor(obj,prop)
//Object.getOwnPropertyDescriptors(obj)
//Object.defineProperty(obj,prop,{descriptor})
//Object.defineProperties(obj,{prop1:{descriptor},prop2:{descriptor}})
//Object.keys(obj) 返回值 属性名构成的数组
//Object.values(obj) 返回值 属性值构成的数组
//Object.entries(obj) 返回值 键值对构成的二维数组
//Object.assign(o1,o2,o3) 对象复制、浅拷贝,不枚举属性丢失、源对象原型丢失、属性描述符丢失
//Object.create(prototype,{prop1:{descriptor},prop2:{descriptor}})
//浅拷贝对象Object.create(Object.getPrototypeOf(obj),Object.getOwnPropertyDescriptors(obj))
//Object.getPrototypeOf(obj)
//Object.getOwnPropertyDescriptor(obj,prop)
//Object.defineProperty(obj,prop,options) 数据/访问的options默认为false
//obj.prop = value 默认options为true
//obj = {prop1:value1,prop2:value2} 默认options为true
//数据属性 options{value,writable,enumerable,configurable}
//访问属性 options{enumerable,configurable,get,set}
//for (key in obj) {console.log(key,obj[key])}
//Object.keys(obj) 返回值 属性名组成的数组
//Object.values(obj) 返回值 属性值组成的数组
//Object.entries(obj) 返回值 键值对组成的二维数组
//Object.defineProperties(obj,{prop1:{descriptor},prop2:{descriptor}})
//Object.getOwnPropertyDescriptors(obj) 得到所有属性的描述符
let person = {
name:'zhangsan',
age:23
}
console.log(Object.getOwnPropertyDescriptor(person,'name'))
person.name = 'modified wangwu'
for (let key in person) {
console.log(key,person[key])
}
delete person.name
console.log(person)
Object.defineProperty(person,'age',{
value:20,
writable: false,
enumerable:false,
configurable:false
})
console.log(Object.getOwnPropertyDescriptor(person,'age'))
var book = {
_year: 2017,
editor: 1
};
Object.defineProperty(book,'year',{
get:function () {
return this._year;
},
set: function(newYear) {
if (newYear !== this._year) {
this._year = newYear;
this.editor++;
}
}
})
console.log(Object.getOwnPropertyDescriptor(book,'year'))
book.year = 2018
for (let key in book) {
console.log(key,book[key])
}
console.log(Object.keys(book))
console.log(Object.values(book))
Object.defineProperty(book,'author',{
value:'hu',
// writable:true,
// enumerable:true,
// configurablle:true
})
console.log(Object.getOwnPropertyDescriptor(book,'author'))
// book.author = 'hu'
console.log(Object.entries(book))
let person1 = {
name:'tom'
}
console.log('-------')
console.log(Object.getOwnPropertyDescriptor(person1,'name'))
Object.defineProperty(person1,'age',{
value:26,
writable:true,
enumerable:true,
configurable:true
})
console.log(Object.entries(person1))
let person2 = {
_name:'zhaoyi',
_age:22,
_tel:123
}
Object.defineProperty(person2,'name',{
get:function() {
return this._name;
}
})
Object.defineProperty(person2,'age',{
set:function(newAge) {
this._age = newAge
}
})
Object.defineProperty(person2,'tel',{
get:function() {
return this._tel;
},
set:function(newTel) {
this._tel = newTel
}
})
console.log('-------')
console.log(person2.name)
console.log(person2.age)
person2.age = 25
console.log(person2._age)
person2.tel = '456798'
console.log(person2.tel)
console.log('--------')
let person3 = {
_name:'wang mazi',
_age: 56,
_tel: 1111
}
Object.defineProperties(person3,{
name:{
get:function() {return this._name}
},
age:{
set:function(newAge) {
this._age = newAge
}
},
tel: {
get:function() {return this._tel},
set:function(newTel) {
this._tel = newTel;
}
}
})
console.log(Object.getOwnPropertyDescriptors(person3))
//浅拷贝一个对象
let obj = {}
let obj3 = Object.defineProperties(obj,{
_year: {
value: 2021,
writable: true,
enumerable: true,
configurable:false
},
_month: {
value:07,
writable: false,
enumerable: true,
configurable: true
},
year: {
enumerable: false,
configurable: true,
get: function() {return this._year}
},
month: {
enumerable: true,
get: function() {return this._month},
set: function(newMonth) {
this._month = newMonth
}
}
})
let obj1 = {}
obj1.__proto__ = {p:'obj1 prototype'}
Object.assign(obj1,obj)
console.log(obj1)
//浅拷贝一个对象Object.assign()
//适合没有属性描述符、及instanceof 类型相同的对象合并
//访问器属性变为数据属性
//只能copy可枚举属性
//无法copy属性描述符
//无法拷贝源对象的原型 obj.__proto__ = Object.prototype
console.log(Object.getOwnPropertyDescriptors(obj),'obj')
console.log(Object.getOwnPropertyDescriptors(obj1),'obj1')
console.log(obj.__proto__)
console.log(obj1.__proto__)
//浅拷贝一个对象
//Object.create(Object.getPrototypeOf(obj),Object.getOwnPropertyDescriptors(obj))
//得到对象的原型,得到对象的属性、属性描述符
let obj2 = Object.create(
Object.getPrototypeOf(obj),
Object.getOwnPropertyDescriptors(obj)
)
console.log(Object.getOwnPropertyDescriptors(obj2),'obj2')
//创建子类
function SupperClass() {}
SupperClass.prototype = {}
function SubClass() {}
SubClass.prototype = Object.create(SupperClass.prototype,Object.getOwnPropertyDescriptors({}))`
Object的常用方法-属性描述符
最新推荐文章于 2024-07-20 10:36:53 发布