JS高阶—day-01
1、理解Object 创建对象
1、通过字面量创建:
var obj={
name:"小明",
age:18
};
2、通过Object构造函数创建:
var obj2=new Object();
obj2.name="小红";
obj2.age=19;
3、通过自定义构造函数创建:
function Parson(name,age,gender){
this.name=name;
this.age=age;
this.gender=gender;
};
var obj3=new Parson("小兰",20,"女");//调用自定义构造函数
Object父类下面的方法(第一天主要讲6个)
简述:
1、Object.keys();
2、Object.getOwnPropertyNames();
3、Object.defineProperty();
4、Object.difineProperties();
5、Object.getOwnPropertyDescriptor();
6、Object.getOwnpropertyDeescriptors();
补充(在对象中默认情况下我们添加的对象的自身属性都是可枚举的,我们可以使用for in 循环遍历它们)
1、Object.keys();
该方法会返回一个给定对象的自身可枚举的属性名 形成的数组
var arr=Object.keys(obj);
参数:给定一个已经纯在的对象
返回值:一个给定的对象的自身可枚举的属性名组成的数组
2、Object.getOwnPropertyNames();
该方法返回一个指定对象的所有自身属性的属性名(包括不可枚举属性)组成的数组
var arr2=Object.getOwnPropertyNames(obj2);
参数:一个给定已经存在的对象
返回值:返回一个由给定对象的属性名组成的数组(包括不可枚举属性)
3、Object.defineProperty();
该方法是定义一个给定对象的属性的操作定义
该方法有三个参数
Object.defineProperty(obj,"name",{
configurable:false;//该属性是设置当前属性是否可被删除, **默认为** **false**
enumerable:false///该属性是否可被枚举, **默认为** **false**
writable:true;//是否可被修改, **默认为** **false**
value:"小青";//直接设置当前值**默认为 undefined**。
})
4、Object.definProperties()
该方法是不是只比方法3多了个s,没错,它就是用来同时设置对象的多个属性
参数:该方法只有两个参数
var obj4={
age:18;
name:"小白";
};
Object.defineProperties(obj4,{
name:{
configurable:true;
enumerable:true;
writable:false;
},
name:{
configurable:false;
enumerable:false;
writable:true;
}
//当然也可以直接设置新的属性
gender:{
configurable:false;
enumerable:true;
writable:false;
value:"女";
}
})
5、Object.getOwnPropertyDescriptor();
该方法是用来返回指定对象的属性的描述符
参数:两个一个是指定的对象,另一个是要获取的属性信息
console.log(Object.getOwnPropertyDescriptor(obj4,"name"));
6、Object.getOwnPropertyDescriptors();
参数:obj 只有一个
返回值:返回指定对象的自身属性的特征描述,没有属性则返回空对象
console.log(Object.getOwnPropertyDescriptors(obj4));
补充知识点:
delete关键字用来删除对象的属性
可以使用in来判断属性是否在对象中。(in的含义就是…中)
属性特征可分为两种:一种是数据属性、另一种是访问器属性(set get 访问器 属性 )
var obj5={
name:"小花",
get getName(){//get属性不能有参数
console.log("用户要求访问");
return this.name;
},
set setName(value(){//set属性必须设定参数
console.log("用户要求修改信息");
this.name=value;
})
}
当然也可以进阶来做一些类似于权限判断的东西:
var obj6={
name:"小花",
age:18,
get getName(){//get属性不能有参数
if(this.age>=18){
console.log("用户要求访问");
return this.name;
}else{
return "您当前权限不足";
}
},
set setName(value(){//set属性必须设定参数
if(this.age>=18){
console.log("用户要求修改信息");
this.name=value;
}else{
alert("您点当前权限不足");
}
})
}
obj5.setName="小黑";
obj5.getName;