目录
目标
对象
什么是对象
为什么需要对象
创建对象的三种方式
利用字面量创建对象
创建对象
使用对象
案例
变量、属性、函数、方法总结
利用 new Object 创建对象
案例
利用构造函数创建对象
为什么需要构造函数
构造函数定义
构造函数语法格式
构造函数使用
案例
构造函数和对象
new 关键字
执行过程
遍历对象属性
小结
作业
简易计算器
1. 在现实生活中:
2. 在 JavaScript 中:
3. 对象是由属性和方法组成的
例如一部手机:
<script> person.name = '张三'; person.sex = '男'; person.age = 20; person.height = 120; </script>
在 JavaScript 中,现阶段我们可以采用三种方式创建对象(object):
调用对象的属性
调用对象的方法
<script> // 利用字面量 {} 创建对象 // var person = {}; 创建一个空对象 // 创建对象 // 里面的属性和方法采取键值对的形式 // 键:属性名 值:属性值 // 多个属性或方法用逗号隔开 // 方法冒号后面定义的是一个匿名函数 // 使用对象 // 调用对象的属性第一种方法:对象名.属性名 // console.log(person.pername); // 调用对象的属性第二种方法:对象名['属性名'] // console.log(person['pername']); // 调用对象的方法 sayHi(): 对象名.方法名 // persom.sayHi(); var person = { pername: '张三', age: 20, sex: '男', sayHi: function() { console.log('hi~~'); } } </script>
<script> var dog = { pername: '可可', // 属性和属性值之间千万不能用 = ,而应该用 : type: '阿拉斯加犬', age: 5, color: '棕红色', bark: function() { console.log('汪~汪~汪'); }, // 对象的两个方法之间的逗号也不能忽视 showFilm: function() { console.log('可可小狗'); } } console.log(dog.pername); console.log(dog['color']); dog.bark(); dog.showFilm(); </script>
注意:
变量和属性
相同点:
不同点:
函数和方法
相同点:
不同点:
<script> // 利用 new Object 创建对象 var dog = new Object(); // 创建了一个空的对象 // 利用等号 = 赋值的方法添加对象的属性和方法 // 每个属性和方法之间用分号 ; 结束 dog.pername = '可可'; dog.type = '阿拉斯加犬'; dog.age = 5; dog.color = '棕红色'; dog.bark = function() { console.log('汪~汪~汪'); } // 使用 new Object 创建对象时,方法后不需要再添加其他符号 dog.showFilm = function() { console.log('小狗可可'); } console.log(dog.pername); console.log(dog['type']); dog.bark(); dog.showFilm(); </script>
<script> var naruto = new Object(); naruto.pername = '鸣人'; naruto.sex = '男'; naruto.age = 19; naruto.skill = function() { console.log('看招,影分身术!!!'); } console.log(naruto.pername); console.log(naruto['age']); naruto.skill(); </script>
<script> // 利用构造函数创建对象 // 构造函数语法格式 // 声明函数 function 构造函数名() { this.属性 = 值; this.方法 = function() {} } // 调用构造函数 new 构造函数名(); </script>
<script> // 利用构造函数创建对象 // 构造函数首字母大写 // 构造函数中的属性和方法前面必须添加 this function Star(pername, age, sex, nativePlace) { // this.pername 代表相同的属性-姓名 // 它的属性值 pername 的来源: 实参'刘德华'传递给形参 'pername',然后传递给 this.pername this.pername = pername; this.age = age; this.sex = sex; this.nativePlace = nativePlace; this.sing = function(sang) { console.log(sang); } // 构造函数不需要 return 就能返回结果 } // 调用构造函数必须使用 new // 调用构造函数时,只要 new Star(),就创建了一个对象 ldh {} // 对象是在调用构造函数时创建的 var ldh = new Star('刘德华', 48, '男', '香港'); console.log(ldh.pername); console.log(ldh['age']); // 将 '冰雨' 传递给形参 sang,然后传递给 log(sang) 进行输出 ldh.sing('冰雨'); var zxy = new Star('张学友', 49, '男', '香港'); console.log(zxy.pername); console.log(zxy['nativePlace']); zxy.sing('吻别'); </script>
注意:
<script> function Hero(heroName, heroProfession, blood, attack) { this.heroName = heroName; this.heroProfession = heroProfession; this.blood = blood; this.attack = attack; this.skill = function(bigMove) { console.log(bigMove); } } // 调用构造函数时 new 一定不能忘记 // 只有 new 之后才会创建一个对象 var houYi = new Hero('后羿', '射手', 500, '远程'); console.log(houYi.heroName); console.log(houYi.attack); houYi.skill('灼日之矢'); var lianPo = new Hero('廉颇', '战士', 1000, '近战'); console.log(lianPo.heroProfession); console.log(lianPo.blood); lianPo.skill('正义豪腕'); </script>
<script> function Hero(heroName, heroProfession, blood, attack) { this.heroName = heroName; this.heroProfession = heroProfession; this.blood = blood; this.attack = attack; this.skill = function(bigMove) { console.log(bigMove); } } var houYi = new Hero('后羿', '射手', 500, '远程'); // for...in 中的变量常用 k 或者 key // 常用于遍历对象的属性 // 对象中有方法时,由于方法调用与变量不同,俺不会,sorry for (var key in houYi) { console.log(key); // key 变量 输出 得到的是属性名 console.log(houYi[key]); // houYi[key] 得到的是属性值 } var lianPo = new Hero('廉颇', '战士', 1000, '近战'); for (var key in lianPo) { console.log(key, lianPo[key]); } </script>