js面向对象编程

333 阅读2分钟

对象

何为对象

对象是一组属性的无序集合,并且对象的每一个和属方法性都有一个名称来标识,这个名称映射到一个值上。

接下来来了解一下属性的类型,如何定义一个或多个属性,怎么样读取属性的特性,如何合并对象,又如何使用对象结构,增强的语法

属性类型

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=20console.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