Object:
ECMAScript是一门面向对象的语言。却不具备传统面向对象语言所拥有的类和接口等基本结构。
1、对象:类的实例化体现,类是对象的抽象体现。
对象是一个个体,他具备自身类的所有属性和方法。
2、新建对象
新建对象的第一种方法
第一个案例
var obj=new Object(); //创建一个新的对象
obj.name="张三"; //对象属性和属性值的第一种用法 : obj.属性=属性值
obj.fire=(function () { //方法属性 方法函数 的第一种用法: obj.方法=方法函数
console.log("生火"); //打印输出
})();
第二个案例
设置五种不同的对象
obj["name"]="张三"; //对象属性和属性值的第二种用法:obj[属性]=属性值
obj["fire1"]=function () { //方法属性 方法函数 的第二种用法:obj[方法]=方法函数
console.log("生火1");
};
obj["fire2"]=function () {
console.log("生火2");
};
obj["fire3"]=function () {
console.log("生火3");
};
obj["fire4"]=function () {
console.log("生火4");
};
for(let i=1;i<5;i++){ //对创建的五个对象进行循环
obj["fire"+i]();
}
第三个案例
var arr=new Object([]); //创建一个数组
arr.push("aaa"); //将"aaa"添加到数组里面
console.log(arr)*/ //打印输出数组
新建对象的第二种方法:
var obj={
属性:属性值,
方法:方法函数
}
花括号在语言中是指代码块的意思,在obj也相当于一个代码块。obj自身在使用中可以完成和丰富各种代码块。
第一个案例
var obj={
name:"张三",
fire:doFireHandler
};
var obj1={
fire1:doFireHandler
}
function doFireHandler() {
console.log("生火");
}
obj.fire();
在函数中,有时候需要返回一个对象,这时候,我们通常使用花括号的形式来返回对象
function abc(){
return {
属性:属性值,
方法:方法函数
}
}
第二个案例
function abc(_name) {
return {
name:_name,
fire:function () {
console.log(_name+"生火");
}
}
}
var obj=abc("张三");
var obj1=abc("李四");
obj.fire();
obj1.fire();
新建对象的第三种方法:Object.create(proto, [ propertiesObject ])
第一个案例
var obj2=Object.create(obj)
console.log(obj2)
对象操作方法
1、delete 删除对象的属性
案例1
var obj={a:3,b:4}
delete obj.a;
delete obj;
console.log(obj) //只能删除属性,不能删除对象
案例2
this.obj={a:3,b:4};
delete obj.a;
delete this.obj;
console.log(this.obj) //能删除对象
2、assign()
1、复制一个对象
2、合并拷贝
3、继承属性和不可枚举的属性是不能被拷贝的
3、defineProperties
给对象定义属性值
Object.defineProperties(对象,{
“属性名”:{
value:属性值,
writeable:布尔值
}
})
案例
var obj={a:1,b:2};
Object.defineProperties(obj,{
"c":{
value:3, //属性值
writable:true //是否可被修改
}
});
obj.c=5;
obj.a=6;
for(var str in obj){
console.log(obj[str],obj.c)
}
4、详细定义对象的属性
Object.defineProperty(obj, prop, descriptor)
var obj={};
Object.defineProperty(obj,“属性名”,{
enumerable: false,
configurable: false,
writable: false,
value: 属性值
})
案例
var obj={a:1,b:2};
Object.defineProperty(obj,"c",{
value:3, //该属性对应的值。可以是任何有效的
writable:false, //是否可写
configurable:false, //是否可写可删除
enumerable:true //是否可被枚举
});
var o=Object.freeze(obj);//冻结对象,使用该方法以后,不能修改该对象的所有属性,不能删除所有属性。
for(var str in obj){
console.log(str,obj[str])
}
for(var str in obj){
var pro=Object.getOwnPropertyDescriptor(obj,str); //获取对象下属性的描述,也就是使用defineProperty定义的所有属性的描述内容
console.log(str,pro.writable);
}
var arr=Object.getOwnPropertyNames(obj); //获取对象下所有属性的名称,并返回一个数组, 该数组的内容就是这些属性名,该数组对元素是 obj 自身拥有的枚举或不可枚举属性名称字符串。
for(let i=0;i<arr.length;i++){
var pro=Object.getOwnPropertyDescriptor(obj,arr[i]);
console.log(arr[i],pro.enumerable)
}
var obj2={a:1,b:2};
var bool= Object.is(obj,obj2); //判断两个对象或者两个内容是否相等
console.log(bool)
Object.freeze(obj) //冻结对象
console.log(Object.isFrozen(obj))*/ //判断一个对象是否被冻结