对象
何为对象
对象是一组属性的无序集合,并且对象的每一个和属方法性都有一个名称来标识,这个名称映射到一个值上。
接下来来了解一下属性的类型,如何定义一个或多个属性,怎么样读取属性的特性,如何合并对象,又如何使用对象结构,增强的语法
属性类型
1,数据属性(有四个特征来描述它们的行为)
-
Configurable:表示属性是否可以delete或者重新定义(默认值为true)
-
Enumerable:表示属性是否可以被for in 给循环返回
-
Writable:表示属性是否可以被修改
-
Value:属性的值
defineProperty(添加或修改属性的对象,属性名称,属性的描述对象)
let book={} definProperty(book,"name",{ writable:false, value:"front-end" }) console.log(book.name)//front-end book.name="Wechat"; console.log(book.name)//front-end
2,访问器属性
-
Configable:表示属性不行被修改,delete,重新定义(默认值为true)
-
Enumerable:表示属性是否可以for in 循环返回
-
get 方法
-
set方法
let person={ name:"xiaofang", year_:28 } Object.defineProperty(person,"year2",{ get(){ return this.year_; }, set(currvalue){ this.year_=currvalue; this.name+=currvalue; }, // value:"pp" }) person.year2=100; console.log(person.year);//100 console.log(person.name);//xiaofang100 console.log(person)//{ name: 'xiaofang100', year_: 100 }
3,定义多个属性
let person={}
Object.defineProperties(person,{
name:{value:"xiaoxiao"},
year_:{value:"19"},
year:{
get:function(){
return this.year_;
}
set:function(currvalue){
this.year_=currvalue+1;
}
}
})
person.year=20;
console.log(person.year)//21
4,读取属性特性
使用Object.definePropertyDescriptor()
let person={};
Object.defineProperties(person,{
name:{value:"xiaoxiao"},
year_:{value:19},
year:{
get:function(){
return this.year_;
},
set:function(currvalue){
this.year_=currvalue+1;
}
}
})
console.log(Object.getOwnPropertyDescriptors(person))//{
// name: {
// value: 'xiaoxiao',
// writable: false,
// enumerable: false,
// configurable: false
// },
// year_: {
// value: 19,
// writable: false,
// enumerable: false,
// configurable: false
// },
// year: {
// get: [Function: get],
// set: [Function: set],
// enumerable: false,
// configurable: false
// }
// }
5,合并对象
将源对象的的属性复制到目标对象中去
使用assign(目标对象,源对象(这里可以传多个源对象))
dest={};
Object.assign(dest,{name:"nan"})
console.log(dest)//{name:""nan"}
6,增强对象语法
可计算属性
const namekey='name';
const agekey='age';
const jobkey='job';
const val=0;
function getuniquekey(key){
return `${key}_${val++}`;
}
let person={
[getuniquekey(namekey)]:'luca',
[getuniquekey(agekey)]:19,
[getuniquekey(jobkey)]:'teacher'
};
console.log(person);//{name_0:"luca",age_1:19,job_2:"teacher"
7,对象解构
let person={
name:"xiaoming",
year:23}
const {name,year}=person