1、对象 与 类
类:
人类:
男人 幼年 老年 中年
女人
对象:
万事万物皆是对象
李某某 人(李某某是人类的一个实例)
红米手机 是手机类型中一个实例
对象的 静态特征(属性), 例如:
①眼睛:
②身高
③体重
对象的 行为(方法),例如:
①吃饭
②睡觉
③跑步
④化妆
⑤说话
⑥打人
3、js中包含哪些类型的对象
- 内置对象(Math,Number,Date)
- 宿主对象(dom,bom)
- 自定义对象:开发人员自己定义的对象
4、如何创建对象(4种方法)?
创建好了之后,如何调用(3种方法)?
创建对象的4种方法:
// 创建对象方法1:
var obj1 = {
name: '林冰冰',
't age': 37,
tall: 168,
sing: function () {
document.write('唱歌')
}
}
// 创建对象方法2:
var obj2 = {}
obj2.name = 'xiaobai'
obj2.color = '白色'
obj2.age = '3'
// 创建对象方法3:
var obj3 = new Object()
obj3.name = '联想拯救者'
// 创建对象方法4:
let obj4 = Object.create(null)
obj4.name = '唐唐'
调用对象属性和方法的3种方式:
//调用对象的属性和行为 写法1(属性):
alert( obj1.name)
//调用对象的属性和行为 写法2(行为):
obj1.sing()
//调用对象的属性和行为 写法3(属性),适用于属性名中带空格呀这种的不好表示的:
alert(obj1['t age'])
5、“构造函数” 怎么做?(名字就叫做“构造函数”)
第一步:用“构造函数” 创建类型
第二步:创建实例
let obj3={
name:'林潇',
't age':18,
}
//构造函数 注意:单词首字母大写
function Actor(name,age){
//this: 当前对象的引用(地址)(看到这个this,你就得默默和底下创建的那个实例联系起来,这些前后关联心里要有数。)
this.name=name;
this['t age']=age;
}
//创建一个演员的实例(其实这也是为了和上面的this相呼应,所以这就是为什么第一步先创建构造函数,第二步就得创建实例了)
let obj4 = new Actor('丁娃',5)
alert(obj4['t age'])
alert(obj4['name'])
//instanceof判断一个对象 是不是 某个类型的实例 如果是则返回true,不是则返回false
alert(obj4 instanceof Actor)//obj4肯定是Actor的实例,因为上一行写了let obj4 = new Actor('丁娃',5)的,而底下那个obj3 肯定不是 Actor类型的实例,因为它没用let obj3 = new Actor()这种固定格式写。
alert(obj3 instanceof Actor)//我们还想试一试,看看别的实例是不是Actor类型的实例,在这里我们假装用个obj3实例测试一下,关于obj3的东西,我们在一开始最上面,已经提前写好了。
6、学习“实例方法”与“静态方法”:
(1)实例方法:使用实例方法的步骤:先写构造函数,再创建对象,再写实例方法,再调用函数
<script>
//学习“实例方法”:(使用实例方法的步骤:先写构造函数,再创建对象,再写实例方法,再调用函数)
//如果我们想要定义一个"车票"的对象,
//说明"车票"是一个类型
//用“构造函数”创建类型(下面这段代码是步骤1)
//构造函数里面,只能写属性,不能再写方法,要写方法需要在构造函数外面用protype写
function Ticket(name,id){
this.width=18;
this.height=10;
this.color='蓝色';
this.name=name;
this.id=id;
//构造函数里面,只能写属性,不能既写了属性又再写方法,要写方法需要在构造函数外面写,把方法攒到外边写,我们就需要把this换成Ticket.prototype,在外边就不能再用this了,不然你程序不知道你写的那个this是谁。所以我们一开始在这里写的方法,现在就要被注释掉了,咱们把它攒到外边去,攒到外边我们用protype写
// this.zhedie=function(){
// alert('通过外力可以折叠')
// }
}
//注意:由于我们在底下已经创建了2个实例,所以这里我们写的这个方法就叫做 定义在Ticket类型实例上的方法
//既然是实例方法,那它的前提就得是要有实例作为依托,所以我们在底下先创建了两个实例。
//(下面这里是步骤3)
//实例方法:
Ticket.prototype.zhedie=function(){
alert('通过外力可以折叠')
}
//第一步的 构造函数写完之后,就该创建对象(所以下面这里是步骤2)
let myticket=new Ticket('张三','819171617')
let myticket1=new Ticket('李四','16786435788')
//(下面这里是步骤4)
myticket.zhedie()
</script>
(2)静态方法:比如下面这段代码,我们Ticket类型有个属性叫run,这个属性的值刚好是个函数,我们不用创建Ticket 的实例,也可以直接调用这个函数,这种我们称之为静态方法
<script>
function Ticket(name,id){
this.width=18;
this.height=10;
this.color='蓝色';
this.name=name;
this.id=id;
}
//这里我们学习静态方法,和上面的那个实例方法不一样
//静态方法:
//比如这里,我们Ticket类型有个属性叫run,这个属性的值刚好是个函数,我们不用创建Ticket 的实例,也可以直接调用这个函数,这种我们称之为静态方法
Ticket.run=function(){
alert('running')
}
Ticket.run()
</script>
一个类型身上,既可以有实例方法,也可以有静态方法。实例方法就必须要有实例作为依托(上面的代码1中就是很好的说明,在构造函数完了之后,第二步就是创建对象,第三步才写实例方法);而静态方法不用依托任何人,在构造函数写完之后,直接用类型写静态方法,然后这个方法直接就可以被调用,全过程不用依托任何人。
生活当中,静态方法的情况比较少见。所以当你看见new了一个实例的时候,那么那段代码里面用的,一定是实例方法。
今天我们学习的“实例方法”,它的代码和思想,和上面第5个知识点“‘构造函数’ 怎么做?”的代码,在前面部分是一模一样的,都是一样的写法流程。注意联系起来看,感悟有些写法。
7、typeof
和instanceof
分别是干什么用的?
①
typeof
是用来判断“类型”的
②instanceof
是用来判断 “某实例是不是某个类型的实例”