一、对象
1、什么是对象?
对象是一种数据类型(复合数据类型),对象中包含了属性和方法
(1)属性:表示对象的静态特征。使用方式为 “ 对象名.属性名”
(2)方法(函数):表示对象的行为(动态特征)。使用方式为“对象名.方法名(【参数】)”
2、对象的创建方式:
(1)使用字面量创建:{ }
let / var / const 对象名 = { }
//创建一个对象 let student = { no:'wn001', name: '马云', sex: '男', eat:function(){ console.log('马云在吃包子') }, sleep: function(){ console.log('马云在睡觉') } } //对象属性和方法的使用 console.log('姓名:'+student.name) console.log('性别:'+student.sex) student.eat() student.sleep()
说明:
(1)保存数据的格式:键: 值(key:value) ---- 称为“键值对”
(2)在程序中可以创建空对象:对象名 = { }
(3)给空对象添加属性、方法
3、通过Object来创建对象:
(1)Object对象:是JavaScript中所有对象的基类
(2)创建空对象:new Object()
let obj = new Object() console.log(obj) obj.name = '诸葛亮' obj.sex = '男' obj.info = function(m,n,t){ console.log('空城计') } console.log(obj)
练习2:通过Object创建一个对象,该对象的属性有:bookId、bookName、publishing,
包含的方法有:
setBookName(name):修改bookName属性值
setPublishing(publish):修改publishing属性值
showBookInfo():显示图书信息
let obj = new Object() obj.bookId = '001' obj.bookName = '三国演义' obj.publishing = '商务印书馆' obj.setBookName = function(name){ this.bookName = name //this代表当前对象obj } obj.setPublishing = function(publishing){ this.publishing = publishing } obj.showBookInfo = function(){ console.log('图书编号:',this.bookId) console.log('图书名称:',this.bookName) console.log('出版社:',this.publishing) } obj.showBookInfo() console.log('-----------------------------') obj.setBookName('水浒传') obj.setPublishing('机械工业出版社') obj.showBookInfo()
或
let book = new Object({ bookId: '001', bookName: 'ABC', publishing: '电子工业', setBookName:function(name){ this.bookName = name }, setPublishing:function(publishing){ this.publishing = publishing }, showBookInfo:function(){ let str = `图书编号:${this.bookId}\n图书名称:${this.bookName}\n出版社:${this.publishing}` console.log(str) } }) book.showBookInfo() console.log('--------------------------') book.setBookName('红楼梦') book.setPublishing('北大出版社') book.showBookInfo()
4、利用构造函数创建对象
(1)构造函数:是一个函数(定义方式和普通函数的定义方式一样的)
function 构造函数名(【参数】){
this.属性名 = 属性值
this.方法名 = function(【参数】){
方法体语句
}
}
建议:构造方法名的首字母要大写
定义构造方法就是画图纸的过程,通过构造方法创建对象(new 构造方法名())就是根据图纸生成对象的过程
(2)通过构造方法创建对象:new 构造方法名(【参数】)
(3)对象使用属性和方法:
对象名.属性
对象名.方法名(【参数】)
//1.定义一个构造方法:包含name、sex、address三个属性,setName(name)、setSex(sex)、setAddress(address)三个方法 function Student(){ //类似于画图纸 this.name = '王昭君' this.sex = '女' this.address = '西安' this.setName = function(name){ this.name = name } this.setSex = function(sex){ this.sex = sex } this.setAddress = function(address){ this.address = address } } //2.利用构造方法创建对象 let s1 = new Student() //强调:构造方法中的this代表当前创建的对象s1 console.log('姓名:',s1.name) console.log('性别:',s1.sex) console.log('地址:',s1.address) let s2 = new Student() //this代表s2 s2.setName('西施') console.log('姓名:',s2.name)
练习3、定义一个构造方法Car(),属性是:color、engine、type ,方法是:setColor(color)、setEngine(engine)、setType(type)、
showCar()
创建两个对象,分别是car1和car2,显示car1的信息,修改car2的三个属性并显示出来
//1.定义构造方法:Car() function Car(color,engine,type){ this.color = color this.engine = engine this.type = type this.setColor = function(color){ this.color = color } this.setEngine = function(engine){ this.engine = engine } this.setType = function(type){ this.type = type } this.showCar = function(){ console.log('颜色:',this.color) console.log('引擎:',this.engine) console.log('型号:',this.type) } } //2.创建对象car1:是构造方法实例化。对象就是实例 let car1 = new Car('红色','L4','2.0') car1.showCar() console.log('----------------------------') //3.创建对象car2: let car2 = new Car('蓝色','v6','3.0') car2.showCar()
强调:this代表的是由构造方法创建的对象
练习4、定义构造方法Person(name,age),属性有:name、age ,方法有:setName(name)、setAge(age)、display()
使用该构造方法创建两个对象:
第一个对象的name:郭靖,age = 22
第二个对象的name:黄蓉,age = 18
显示这两个对象的信息
function Person(name,age){ this.name = name this.age = age this.setName = function(name){ this.name = name } this.setAge = function(age){ this.age = age } this.display = function(){ console.log('姓名:',this.name) console.log('年龄:',this.age) } } let p1 = new Person('郭靖',22) p1.display() let p2 = new Person('黄蓉',18) p2.display()
二、遍历对象的属性和方法:使用for...in循环
1、对象访问属性或方法的方式:对象名[ '属性名或方法名' ]
2、for...in的使用方法:
let people = {
id: '1001',
name: '张三丰',
age : 88,
show:function(){
console.log('姓名:',this.name)
}
}
for(let p in people){
console.log(p+':'+people[p]) //p既是people对象的属性名或方法名,也是索引
}
三、in运算符:判断对象中是否存在某个属性或方法
console.log('show' in people) //判断people对象中是否有id这个成员
四、对象数组:数组中存放的是对象(数组中的每个元素都是对象)
//1.创建一个构造方法:Student
function Student(name,city){
this.name = name
this.city = city
this.html = 0 //html属性的默认值为0
this.css = 0 //css属性的默认值为0
this.show = function(){
console.log('姓名:',this.name)
console.log('城市:',this.city)
console.log('Html成绩:',this.html)
console.log('Css成绩:',this.css)
}
this.getSum = function(){
return this.html + this.css
}
}
//2.创建对象
let s1 = new Student('贾宝玉','南京')
s1.html = 78
s1.css = 69
let s2 = new Student('林黛玉','镇江')
s2.html = 85
s2.css = 90
let s3 = new Student('王熙凤','南京')
s3.html = 75
s3.css = 78
let s4 = new Student('薛宝钗','南京')
s4.html = 82
s4.css = 65
//3.定义数组:将s1~s4对象存入该数组
let arr = [s1,s2,s3,s4] //arr就是对象数组
let temp = [s1,s2,s3,s4]
console.log(temp)
//4.对数组中的对象按总成绩降序排列
for(let i=0;i<arr.length;i++){
for(let j=0;j<arr.length-1;j++){
if(arr[j].getSum() < arr[j+1].getSum()){
let t = arr[j]
arr[j] = arr[j+1]
arr[j+1] = t
}
}
}
console.log(arr)
总结:
一、复习
1、对象:是一种数据类型(复合数据类型),用来存储数据。数据格式(key:value)。对象是属性和行为的结合体
2、对象的定义:
(1)使用字面量:{ }
let 对象名 = {
属性名:属性值
方法名:function(【参数】){
函数体语句
}
}
(2)使用Object:
a、let 对象名 = new Object()
对象名.属性名 = 属性值
对象名.方法名 = function(【参数】){
函数体语句
}
b、let 对象名 = new Object({
属性名:属性值
方法名:function(【参数】){
函数体语句
}
})
(3)使用构造函数创建对象
a、定义构造函数:
function 构造函数名(【参数】){
this.属性名 = 属性值
this.方法名 = function(【参数】){
函数体语句
}
}
b、创建对象
let 对象名 = new 构造函数名(【参数】)
3、对象访问属性和方法
对象名.属性名
对象名.方法名(【参数】)
练习1: 请定义一个交通工具(Vehicle)的构造方法,其中有: 属性:速度(speed),体积(size) 方法:移动(move()),设置速度(setSpeed(speed)),加速speedUp(),减速speedDown().
创建一个交通工具对象,并通过构造方法给它初始化speed,size的值,并且打印出来。另外,调用加速,减速的方法对速度进行改变。
function Vehicle(type,speed,size){
this.type = type
this.speed = speed
this.size = size
this.move = function(){
console.log(this.type+'在移动...')
}
this.setSpeed = function(speed){
this.speed = speed
}
this.speedUp = function(){
console.log(this.type+'原来的速度为:',this.speed)
this.speed += 20
console.log(this.type+'加速到:',this.speed)
}
this.speedDown = function()
{
console.log(this.type+'原来的速度为:',this.speed)
this.speed -= 50
console.log(this.type+'减速到:',this.speed)
}
}
let bm = new Vehicle('宝马',120,5.0)
bm.move()
bm.speedUp()
bm.speedDown()
console.log('-----------------------')
let bz = new Vehicle('奔驰',100,4.98)
bz.move()
bz.speedUp()
bz.speedDown()
console.log('-----------------------')
let fly = new Vehicle('空客A380',800,35)
fly.move()
fly.speedUp()
fly.speedDown()
练习2: 模拟简单的计算器。定义名为Number的构造方法 属性:n1和n2。 方法:加(addition)、减(subtration)、乘(multiplication)、除(division),
用Number创建对象分别对两个成员变量执行加、减、乘、除的运算。并显示计算结果。
function Number(n1,n2){
this.n1 = n1
this.n2 = n2
this.addition = function(){
return n1 + n2
}
this.subtration = function(){
return n1 - n2
}
this.multiplication = function(){
return n1*n2
}
this.division = function(){
if(n2 != 0){
return n1/n2
}
alert('除数不能为0')
}
}
let a = 15,b = 20
let num = new Number(a,b)
console.log(`${a} + ${b} = ${num.addition(a,b)}`)
console.log(`${a} - ${b} = ${num.subtration(a,b)}`)
console.log(`${a} * ${b} = ${num.multiplication(a,b)}`)
console.log(`${a} / ${b} = ${num.division(a,b)}`)