对象
1.对象
1.1什么是对象
在JavaScript中,对象是一组无序的相关属性和方法的集合,所有的事物都是对象,例如字符串、数值、数组、函数等。
对象由属性和方法构成
- 属性:事物的特性,在对象中用属性来表示(常用名词)
- 方法:事物的行为,在对象中用方法来表示(常用动词)
1.2为什么需要对象
保留一个值时,可以使用变量,保留多个值时,可以使用数组。
保留一个人的完整信息呢?
例如,将某个人的个人信息保存在数组中的方式为:
var arr = ['张三', '男', 28, 178];
JS中的对象表达式结构更加清晰。张三的个人信息在对象中的表达结构如下:
person.name = '张三';
person.sex = '男';
person.age = 28;
person.height = 178;
2.创建对象的三种方式
在JavaScript中,现阶段我们可以采用三种方式来创建对象(object):
- 利用字面量来创建
- 利用new Object来创建
- 利用构造函数来创建
变量、属性、函数、方法总结
- 变量:单独声明赋值,单独存在
- 属性:对象里面的变量称为属性,不需要声明,用来描述该对象的特征
- 函数:单独存在,通过“函数名()”的方式就可以调用
- 方法:对象里面的函数称为方法,方法不需要声明,使用“对象.方法名()”就可以调用,方法用来描述该对象的行为和功能
2.1利用字面量创建对象
对象字面量:就是花括号{}里面包含了表达这个具体事物(对象)的属性和方法。{}里面采取键值对的形式表示
- 键:相当于是属性名
- 值:相当于是属性值,可以是任意类型的值(数字、字符串、布尔值、函数)
对象的调用
- 对象里面的属性调用:对象.属性名
- 对象里面属性的另一种调用:对象[‘属性名’],要注意属性必须加引号
- 对象里面方法的调用:对象.方法名(),注意方法后面要加括号
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>利用对象字面量来创建对象</title>
<script>
// var obj = {};//创建了一个空对象
// 1.对象的创建
var obj = {
uname: '张三',
age: 18,
sex: '男',
sayHi: function() {
console.log('hi');
}
}
// 2.对象的使用
//调用对象的属性
console.log(obj.uname);//对象.属性名
console.log(obj['age']);//对象名['属性名']
//调用对象的方法
obj.sayHi();//对象名.方法名()
</script>
</head>
<body>
</body>
</html>
2.2利用new Object创建对象
跟前面学的new Array()创建数组的原理一致
调用方式跟字面量创建相同
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>利用new Object创建对象</title>
<script>
var obj = new Object();//创建了一个空的对象
//利用等号赋值的方法,添加对象的属性和方法
//每个属性和方法之间用分号结束
obj.name = '张三';
obj.age = 18;
obj.sex = '男';
obj.sayHi = function() {
console.log('hi');
}
console.log(obj.name);
console.log(obj['age']);//注意单引号
obj.sayHi();
</script>
</head>
<body>
</body>
</html>
2.3利用构造函数创建对象
构造函数:是一种特殊的函数,主要用来初始化对象,即为对象成员变量赋初始值,它总和new运算符一起使用,我们可以把对象中一些公共的属性和方法抽取出来,然后封装到这个函数里面。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>利用构造函数创建对象</title>
<script>
// 构造函数的语法格式
// function 构造函数名() {
// this.属性 = 值;
// this.方法 = function() {};
// }
// new 构造函数名();
function Star(name, age, sex) {//构造函数首字母大写,是为了与函数名区分
this.uname = name;//注意前面要有this,还是为了跟函数区分
this.age = age;
this.sex = sex;
this.sing = function(song) {
console.log(song);
}
}
var ldh = new Star('刘德华', 18, '男');//调用构造函数返回的是一个对象
var zxy = new Star('张学友', 19, '男');
console.log(typeof ldh);
console.log(ldh.uname);
ldh.sing('冰雨');//调用方法
console.log(ldh['sex']);
console.log(zxy.age);
zxy.sing('李香兰');
// 1.构造函数名字首字母大写
// 2.构造函数不需要return就可以返回结果,返回的是一个对象
// 3.调用构造函数时必须使用new
// 4.属性和方法前必须有this
</script>
</head>
<body>
</body>
</html>
2.4构造函数与对象的区别
- 构造函数,抽象了对象的公共部分,封装到函数里面,泛指一大类(class)
- 利用构造函数创建对象,特指某一个,通过new关键字创建对象的过程我们也叫做对象实例化
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>构造函数与对象的区别</title>
<script>
// 1.构造函数,泛指一大类
function Star(uname, age, sex) {
this.name = uname;
this.age = age;
this.sex = sex;
this.sing = function(song) {
console.log(song);
}
}
// 2.对象,特指一个具体事物
var ldh = new Star('刘德华', 18, '男');//调用构造函数返回的是一个对象
console.log(ldh.name);
console.log(ldh['sex']);
// 3.利用构造函数创建对象的过程也叫做对象的实例化
</script>
</head>
<body>
</body>
</html>
3.new关键字
new在执行时会做四件事情
- 在内存中创建一个新的空对象
- 让this指向这个空对象
- 执行构造函数里面的代码,给这个新对象添加属性和方法
- 返回这个新对象(因此构造函数里不需要return)
4.遍历对象属性
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>遍历对象</title>
<script>
var obj = {
name: '菜鸟',
age: 18,
sex: '男',
fn: function() {
console.log('1111');
}
}
//console.log(obj.name);
//console.log(obj.age);
//console.log(obj.sex);
// for in 遍历对象
// for (变量 in 对象) {
// }
//for in 里面的变量,习惯于写k,或者是key
for (var k in obj) {
console.log(k); //k 变量输出,得到的是属性名 name,age,sex
console.log(obj[k]);//得到的是属性值菜鸟,18,男
}
</script>
</head>
<body>
</body>
</html>
5.小结
- 对象可以让结构更加清晰
- 对象是复杂数据类型object
- 本质:对象是一组无序的相关属性和方法的集合
- 构造函数泛指某一大类,比如苹果,苹果有很多品种,但都是叫做苹果
- 对象实例,特指一个事物
- for in 语句用于遍历对象的属性