对象
对象:属性和方法的集合,所有的事物都是对象,例如字符串、数值、数组。函数等。
- 属性:事物的特征,在对象中用属性来表示(常用名词)。
- 方法:事物的行为,在对象中用方法来表示(常用动词)。
创建对象
常用三种方法创建对象
-
利用字面值创建对象。
let folder1={ 'size':2000, 'name':'folder1', 'subFiles':['index.js'], 'other object':null }; console.log(typeof folder1,folder1); let folder2={ size:2000, name:'folder2', subFiles:['index.js'], 'other object':folder1//合法标识符 };
-
利用new Object创建对象
格式:对象.属性=值var obj=new Object(); obj.name='张三丰'; obj.age=18; obj.sex='男';
-
利用构造函数创建对象
构造函数是一种特殊的函数,主要用来初始化对象,即为对象成员变量赋初始值,它总与new运算符一起使用
注意:
-
构造函数用于创建某一类对象,其首字母要大写
-
构造函数要和new一起使用
格式:function 构造函数名(){ this.属性=值; this.方法=function(){} } new 构造函数名(); function Star(uname,age,sex){ this.name=uname; this.age=age; this.sex=sex; this.sing=function(sang){ console.log(sang); } } var ldh=new Star('刘德华',18,'男'); ldh.sing('冰雨');
对象的属性:名必须是字符串,值可以是任意的。
对象的调用
访问、修改属性
-
对象.属性名
console.log(folder2.size,folder2.name);
-
对象[‘属性名’]
console.log(folder2['size'],folder2['name'],folder2['other object']);
-
方法调用:对象.方法名()
var star={ name:'pink', age:18, sex:'男', sayHi:function(){ alert('大家好啊~'); } }
-
添加属性
folder2.createTime='2020-6-1'; folder2['modifyTime']='2020-6-15'; console.log(folder2);
[ ]里面可以填入任意有效的值(表达式)
let sizeKey = 'size';
console.log(folder2[sizeKey],folder2['na'+'me']);
链式调用
console.log(folder2["other object"].subFiles[0]);//第1个属性
JS容错,访问不存在的属性,返回undefined
动态地增删对象属性
遍历对象的所有属性
const student={
name:'张三',
age:20,
interests:['跑步','看书'],
teacher:{
name:'李四'
}
};
console.log(Object.keys(student));//Object是JavaScript提供的一个全局对象
for(const key in student){
console.log(key,student[key]);
}
对象的引用
class Rectangle{
constructor(length,width){
this.length=length;
this.width=width;
}
area(){
return this.length*this.width;
}
}
const rect = new Rectangle(20,10);
const rect1 = {
length:20,
width:10
};
console.log(rect.area());
实践:简单的深拷贝