目录
- 对象
- 创建对象得三种方式
- new关键字
- 遍历对象属性
一、对象
1.1、什么是对象?
在 JavaScript 中,对象是一组无序的相关属性和方法的集合,所有的事物都是对象,例如字符串、数值、数组、函数等。 属性:事物的特征,在对象中用属性来表示(常用名词) 方法:事物的行为,在对象中用方法来表示(常用动词) 为什么需要对象? 保存一个值时,可以使用变量,保存多个值(一组值)时,可以使用数组。 如果要保存一个人的完整信息呢?
例如,将“克比”的个人的信息保存在数组中的方式为:
var arr = [‘克比’, ‘男', 128,154];
上述例子中用数组保存数据的缺点是:数据只能通过索引值访问,开发者需要清晰的清除所有的数据的排行才能准确地获取数据,而当数据量庞大时,不可能做到记忆所有数据的索引值。 为了让更好地存储一组数据,使用对象记录上组数据为:
var obj = {
"name":"克比",
"sex":"男",
"age":128,
"height":154
}
二、创建对象得三种方式
在JavaScript中,现阶段我们可以采用三种方式创建对象(object):
- 利用
字面量创建对象 - 利用
new Object创建对象 - 利用
构造函数创建对象
2.1、利用字面量创建对象
对象字面量:就是花括号 { } 里面包含了表达这个具体事物(对象)得属性和方法。
{ } 里面采取键值对得形式表示
- 键:相当于属性名
- 值:相当于属性值,可以是任意类型得值(数字类型、字符串类型、布尔类型、函数类型等)
2.1.1、对象得调用
- 对象里面得属性调用:
对象.属性名,这个小点. 就理解为“的” - 对象里面属性的另一种调用方式:
对象[ '属性名' ],注意方括号里面的属性必须加引号 - 对象里面的方法调用:
对象.方法名(),注意这个方法名字后面一定加括号
// 1. 利用对象字面量创建对象 { }
// var obj = { }; // 创建了一个空的对象
var obj = {
uname = '张三丰';
age = 18,
sex = '男';
sayHi : function( ){
console.log( 'hi~' );
}
}
// (1) 里面的属性或者方法我们采取键值对的形式 键 属性名: 值 属性值
// (2) 多个属性或者方法中间用逗号隔开的
// (3) 方法冒号后面跟的是一个匿名函数
// 2. 使用对象
// (1). 调用对象的属性 我们采取 对象名.属性名 . 我们理解为 的
console.log( obj.uname );
// (2). 调用属性还有一种方法 对象名[ '属性名' ]
console.log( obj[ 'age' ] );
// (3). 调用对象的方法 sayHi 对象名.方法名() 千万别忘记添加小括号
obj.sayHi( );
2.1.2、变量、属性、函数、方法总结
// 1. 变量和属性的相同的 他们都是用来存储数据的
var num = 10;
var obj = {
age : 18;
fn : function( ) {
}
}
function fn( ) {
}
console.log( obj.age );
// 变量 单独声明并赋值 使用的时候直接写变量名 单独存在
// 属性 在对象里面的不需要声明的 使用的时候必须是 对象.属性
// 2. 函数和方法的相同点 都是实现某种功能 做某件事
// 函数是单独声明 并且调用的 函数名() 单独存在的
// 方法 在对象里面 调用的时候 对象.方法()
2.2、利用 new Object 创建对象
var obj = new Object( ); // 创建了一个空的对象
obj.uname = '张三丰';
obj.age = 18;
obj.sex = '男';
obj.sayHi = function( ) {
console.log( 'hi~');
}
// (1) 我们是利用 等号 = 赋值的方法 添加对象的属性和方法
// (2) 每个属性和方法直接用 分号结束
console.log(obj.uname);
console.log(obj['sex']);
obj.sayHi( );
2.3、利用构造函数创建对象
构造函数:是一种特殊的函数,主要用来初始化对象,即为对象成员变量赋初始值,它总与 new 运算符一起使用。我们可以把对象中一些公共的属性和方法抽取出来,然后封装到这个函数里面。
// 利用构造函数创建对象
// 我们需要创建四大天王的对象 相同的属性:名字 年龄 性别 相同的方法:唱歌
// 构造函数的语法格式
// function 构造函数名(){
// this.属性 = 值;
// this.方法 = function( ) { }
// }
// new 构造函数名( ) ;
function Star( ) {
}
new Star('刘德华', 18, '女');
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, '女'); // 调用函数返回的是一个对象
console.log( ldh.name );
console.log( ldh[ 'sex' ]);
ldh.sang('冰雨');
// 1. 构造函数名字首字母要大写
// 2. 我们构造函数不需要 return 就可以返回结果
// 3. 我们调用构造函数 必须使用 new
// 4. 我们只要new Star()调用函数就可以创建一个对象 ldh { }
// 5. 我们的属性和方法前面必须添加 this
2.4、构造函数和对象
- 构造函数,如Stars( ),抽取了对象的公共部分,封装到了函数里面,它泛指某一大类(class)
- 创建对象,如 new Stars( ),特指某一个,通过 new 关键字创建对象的过程我们也称为对象实例化
// 构造函数和对象
// 1. 构造函数 明星 泛指的某一大类 它类似于 java 语言里面的 类(class)
function Star( uname, age, sex ) {
this.name = uname;
this.age = age;
this,sex = sex;
this.sing = function( sang) {
console.log( sang );
}
}
// 2. 对象 特质 是一个具体的事物 刘德华 == { name : '刘德华',age : 18, sex : '男',sing :f}
var ldh = new Star( '刘德华', 18, '男'); // 调用函数返回的是一个对象
console.log(ldh);
// 3. 我们利用构造函数创建对象的过程我们也称为对象的实例化
三、new 关键字执行过程
// new 构造函数可以在内存中创建了一个空的对象
// 1. new 构造函数可以在内存中创建了一个空的对象
// 2. this 就会指向刚才创建的空对象
// 3. 执行构造函数里面的代码 给这个空对象添加属性和方法
// 4.返回这个对象
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, ' 女');
三、new 关键字
new 在执行时会做四件事情:
- 在内存中创建一个新的空对象
- 让 this 指向这个新的对象
- 执行构造函数里面的代码,给这个新对象添加属性和方法
- 返回这个新对象(所以构造函数里面需要return)
// new 关键字执行过程
// 1. new 构造函数可以在内存中创建了一个空的对象
// 2. this 就会指向刚才创建的空对象
// 3. 执行构造函数里面的代码 给这个空对象添加属性和方法
// 4. 返回这个对象
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, '男');
四、遍历对象属性
var obj = {
name : 'pink先生',
age : 18,
sex : '男',
fn : function( ) { }
}
// console.log(obj.name);
//for in 遍历我们的对象
// for( 变量 in 对象 ){
// }
for ( var k in obj) {
console.log( k ); // k 变量 输出 得到的是 属性名
console.log( obj[ k ] ); // obj[ k ] 得到是 属性值
}
// 我们使用 for in 里面的变量 我们喜欢写 k 或者 key
4.1、小结
-
- 对象可以让代码结构更清晰
-
- 对象复杂数据类型object
-
- 本质:对象就是一组无序的相关属性和方法的集合
-
- 构造函数泛指某一大类,比如苹果,不管是红色苹果还是绿色苹果,都统称为苹果
-
- 对象实例特质一个事物,比如这个苹果
-
- for ...in 语句用于对对象的属性进行循环操作