JavaScript进阶七(对象)
文章目录
一、什么是对象
所有的事物都是对象,例如字符串、数值、数组、函数等。对象是由属性和方法组成的。在面向对象中把’属性’称为对象的成员(成员变量),把’行为’称为成员方法(成员函数)。在JavaScript中,对象是一种数据类型,是一组无序的相关属性和方法的集合。
属性:事物的特征,在对象中用属性来表示,反映的是对象的静态特征(常用名词)
方法:事物的行为,在对象中用方法来表示,反映对象的动态特征(常用动词)
二、为什么需要对象
变量可以保存一个值,数组可以保存多个值,但是如果想要保存多个信息时,就可以使用对象。它的表达结构更清晰,更强大。
三、创建对象的三种方法
用"{}“表示一个对象,在”{}“中包裹了对象的成员(包括属性和方法)
以"key:value”(键-值对)方式存储各成员。"key"是成员名,"value"是成员的值。
对成员的访问格式是:
对象名.属性名 或 对象名[‘属性名’]
对象名.方法名([参数]) 或 对象名 [‘方法名’] ([参数])
1、利用字面量创建对象
对象的字面量就是用花括号“{ }”来包裹对象中的成员,每个成员使用“key: value”的形式来保存,key表示属性名或方法名,value表示对应的值。多个对象成员之间用“,”隔开。
举例如下:
var person1 = {
name : '旺旺',
age : 12,
skill(){
console.log("hahahaha!");
}
};
console.log(person1.name);//.我们可以理解为‘的’
console.log(person1['age']);//注意方括号里面的属性必须加引号
person1.skill();
//输出为:
旺旺
12
hahahaha!
2、用new Object创建对象
Object:是JavaScript中的超级对象,即用户创建的对象都直接或间接的继承了该对象的某些特性。
创建方式:
var 对象名 = new Object();
var person2 = new Object();
person2.name = '嘻嘻';
person2.age = 13;
person2.skill = function(){
console.log("wawawa!")
};
//(1)我们是利用 等号 = 赋值 添加对象的属性和方法
//(2)每个属性和方法之间用分号
console.log(person2.name);
console.log(person2['age']);
person2.skill();
//输出为:
嘻嘻
13
wawawa!
3、利用构造函数创建对象
(1)因为前面两种方法一次只能创建一个对象,很多相同的属性和方法我们只能复制,所以我们可以利用函数的方法,重复这些相同的代码,我们把这个函数称为构造函数,因为这个函数与其他函数不一样,里面封装的不是普通代码,是对象,所以我们称为构造函数。
(2)构造函数是一种特殊的函数,主要用来初始化对象,即为对象成员变量赋初始值,它总与new运算符一起使用,我们可以把对象中的一些公共的属性和方法抽取出来,然后封装到这个函数里面。
(3)使用构造函数创建对象的语法为“new 构造函数名()”,在小括号中可以传递参数给构造函数,如果没有参数,小括号可以省略。
它的基本格式为:
// 编写构造函数
function 构造函数名() {
this.属性 = 属性;
this.方法 = function() {
// 方法体
}
}
// 使用构造函数创建对象
var obj = new 构造函数名();
举例如下:
function Hero(name,type,blood){
this.name = name;
this.type = type;
this.blood = blood;
this.attackMethod = function(method){
console.log(method);
}
}
var lp = new Hero('廉颇','strength',500);
console.log(lp.name);
console.log(lp.type);
console.log(lp['blood']);
lp.attackMethod('close-combat');
var hy = new Hero('后羿','shooter',100);
console.log(hy.name);
console.log(hy.type);
console.log(hy['blood']);
hy.attackMethod('far-attack');
//输出为:
廉颇
strength
500
close-combat
后羿
shooter
100
far-attack
注意:
1、建议构造函数名字首字母大写;
2、构造函数不需要return就可以返回结果;
3、调用构造函数必须使用new;
4、this是关键字,代表当前对象。
new关键字执行过程
1、new 构造函数可以在内存中创建一个空的对象;
2、this就会指向刚才创建的空对象;
3、执行构造函数里面的代码,给这个空对象添加属性和方法;
4、返回这个对象(所以不需要构造函数return)。
四、变量、属性、函数、方法的区别
1、变量和属性
相同点:
他们都是用来存储数据的。
不同点:
变量:单独声明并赋值,使用时直接写变量名,单独存在。
属性:在对象里面的变量,不需要声明,用来描述该对象的特征,使用时必须是 对象.属性。
2、函数和方法
相同点:
都是实现某种功能,做某种事。
不同点:
函数:单独声明且调用,函数名()单独存在。
方法:在对象里面的函数,不需要声明,用来描述该对象的行为和功能,调用的时候是对象.方法()。
五、对象与构造函数的区别
对象:特指,是一个具体的事物;
构造函数:抽象了对象的公共部分,封装到了函数里面,是泛指某一大类。
我们利用构造函数创建对象的过程也称为对象的实例化。
六、遍历对象
使用for…in语法可以遍历对象中的所有属性和方法,基本格式为:
for(变量 in 对象){
}
举例如下:
var obj = {
name:'孙佳佳',
age:19,
}
for(var k in obj){
console.log(k);// k 变量输出得到的是属性名
console.log(obj[k]);//obj[k]得到的是属性值
}
//输出为:
name
孙佳佳
age
19
注:使用for in 里面的变量 我们喜欢用k或key,但其他的也可以。
我们还可以使用in运算符判断对象是否存在某个成员
‘成员名’ in 对象名 -->返回一个boolean型的值,'true’表示存在,'false’表示不存在,注意成员名用引号引起来。
var obj = {
name:'孙佳佳',
age:19,
}
console.log('name' in obj);
console.log('sex' in obj);
//输出为:
true
false