第十五节:对象
概述:对象是一组无序的相关属性和方法的集合
- 属性:事物的特征,在对象中用属性来表示(表示名词)
- 方法:事物的行为,在对象中用方法来表示(常用动词)
作用:保存多个对象
万物皆对象
例如:字符串、数值、数组、函数
3.4.1 定义对象
参数、返回值、功能、何时调用
字面量创建对象
// 语法格式:
var 对象名 = {
键名1: 值1;
键名2: 值2;
}
var o = {
name: '小明',
age: 18,
sex: '男',
action: function() {
alert('方法');
},
firends: ['韩信', '赵云', '貂蝉'];
}
键值对:
键:name, age, sex, action, firends
值:小明, 18, 男, function() {alert('方法');}, ['韩信', '赵云', '貂蝉']
// 动态加属性
o.love = 'eat';
构造函数创建对象
// 语法格式:
var 对象名 = new Object();
对象名.属性1 = 值1;
对象名.属性2 = 值2;
工厂函数创建对象
要基于构造函数创建对象
实际开发常用
// 语法格式:
function Create(参数1, 参数2) {
var o = new Object();
o.属性1 = 参数1;
o.属性2 = 参数2;
return 0;
}
function Creator(name, age, sex) {
// 创建对象
// var o = {};
// 构造函数创建对象
var o = new Object();
o.name = name;
o.age = age;
o.sex = sex;
return o;
}
var hero1 = Creator('张三', 18, '男');
var hero2 = Creator('李四', 19, '女');
var hero3 = Creator('王五', 22, '男');
console.log(hero1);
console.log(hero2);
console.log(hero3);
自定义函数创建对象
作用:解决了工厂函数无法通过 instanceof 校验是谁创建出来的对象
// 语法格式
function Creator (形参1, 形参2) {
this.属性1 = 形参1;
this.属性2 = 形参2;
}
function Creator (name, age, age) {
//
this.name = name;
this.age = age;
this.sex = age;
}
var o1 = new Creator('悟空', 18, '男');
console.log(o1);
// 校验 o1 是否是 Creator 构造函数创建出来的
alert (o1 instanceof Creator); /// true
new 关键字执行过程
- 在内存中创建一个空对象
- this 指向创建的对象
- 执行函数
- 返回当前对象
3.4.2 访问对象
访问对象的三种方式
对象名.属性名 的形式,属性中间不能有空格,而对象名[‘属性名’] 的形式可以存在空格,更灵活
// 语法格式:
对象名.属性名;
对象名[''];
对象名[变量名]; // 值为变量时,这个变量一定要在 键 上出现
// 访问对象
console.log(o.name);
o['age'];
o['action']();
ES6 语法 结构赋值 访问对象
// 创建对象
var o = {
name: '小明',
age: 18,
sex: '男',
action: function() {
alert('方法');
},
firends: ['韩信', '赵云', '貂蝉'];
}
// 结构赋值 访问对象
var {name, age, sex, action} = o;
// 调用
alert(name);
alert(age);
alert(sex);
// 调用方法时,直接写方法名
action();
3.4.3 校验对象 instanceof
function C(name, age) {
// 构造函数创建对象
var o = new Object();
o.name = name;
o.age = age;
retuen o;
}
// 工厂函数创建对象
var o1 = new C('小明', 20);
var o2 = new C('小红', 20);
// 校验对象是谁创建出来的
alert(o1 instanceof Object);
3.4.4 遍历对象
for ··· in ···
var obj = {
name : '小明',
age: 18,
sex: '男'
};
for (var key in obj) {
// console.log(键, 值);
console.log(key, obj[key];
}