本文已参与「新人创作礼」活动, 一起开启掘金创作之路。
1. 什么是对象,如何创建对象
1.1 什么是对象?
相信大家在学习JS之前应该是或多或少了解过面向对象语言,JS的对象和他们一样,是一个抽象的实体,而这个实体里面有这个对象的信息,和相关的行为,在对象中我们将信息抽象成数据,将行为抽象成函数(方法)。
好比一个人,人有姓名、年龄、性别等信息,同时具有吃饭、睡觉等行为,那人就是一个实体,我们将其抽象成对象,写成代码就如下:
var Person = {
name : shea,
age : 18,
gender : female,
eating : function(){
alert("现在在吃饭");
},
sleeping : function(){
alert("现在在睡觉")
}
}
1.2 如何创建对象
上面我们创建了一个对象,那对象创建的规则是什么呢?
var objectName = {
member1Name : member1Value,
member2Name : member2Value,
member3Name : member3Value
}
像上述person的中的name age gender eating sleeping 都是成员变量,而前面name age gender都是字面量,这种我们称作属性,后面两个函数我们称作方法。
2. 如何访问对象的属性和方法
2.1 使用点访问
和Java一样,一个对象实体创建好以后,你要调用它的方法和属性,可以直接使用.来调用
基本规则就是对象名.属性或者方法名
如下
person.name
person.eating
想要看到效果可以写一段代码,然后在浏览器的控制台玩一下。
2.2 使用括号访问
还有一种访问方式是括号访问,就是将点后面的内容变成括号,颇有一番数组的风味
规则对象名['属性或方法名']
展示如下
person['name']
person['eating']
3. 类和构造函数
3.1 类的介绍和创建
说到面向对象编程,就不得不说到类和对象,上面对象以及讲完了,现在我们来讲讲类。
在学习java的时候,类和对象的区别就是,类将对象抽象了,而上面person的例子,我觉得更适合拿来当类,而不是对象。因为类是抽象,而对象是实体。就像人是一类生物,而你才是一个具体的人。你会说你要和Shea进行交流,而不是说我要和人类进行交流。
那这里我们就写一个Person类:
class Person{
name;
gender;
age;
constructor(name,gender,age){
this.name = name;
this.gender = gender;
this.age = age;
}
eating(){
alert("现在在吃饭");
}
sleeping(){
alert("现在在睡觉");
}
}
3.2 构造函数
上面的类和对象不一样的点在于,对象中的name age gender这些属性都没有值。我们可以理解为class是女娲造人的模子,而每个人会有相同的地方,但是长相不同,而这个长相是怎么样的,就要看你出生长什么样子了,而这个时候就要看new 对象时候填入信息。
而这些信息填在哪里?就是在构造函数中。
所以在编写类的时候一定要记得编写构造函数!
构造函数和其他函数不一样,是使用constructor来标识。
4. 类的继承
4.1 什么是继承
讲到面向对象编程,那脱口而出的就是它的三个基本特征:封装、继承、多态,这小结我们先了解一下JS的继承
那生活在这个世界上的人呢,会有很多的职业,而这些职业之间的人拥有的技能是不一样的,比如有老师的职业,而他的技能就是教授某一门课程,比如医生的职业,而他的技能可能是内科,可能是外科,比如程序员也有前端后端之分。
而老师、医生、程序员这些都是人的职业,或者某一类人,那就可以从人这个十分抽象的类里面,再进行一次具体化的抽象,那就是老师、医生、程序员继承人类这个类。
而继承使用的关键字是extends如下:
class Programmer extends Person{
}
4.2 继承的代码编写
当我们写完上述代码以后,我们要继承Person原来拥有的属性和方法,使用的是super()函数,而且我们可以在这个基础上添加属于程序员专有的属性和方法,如下:
class Programmer extends Person{
role;
constructor(name,gender,age,role){
super(name,gender,age);
this.role = role;
}
eating(){
alert("现在在吃饭");
}
sleeping(){
alert("现在在睡觉");
}
coding(){
alert("现在在写代码");
}
}
5. 封装
封装最主要的就是我们有些值,是外界不能直接访问和修改的,这主要是为了数据的安全,这些属性和方法我们都称作私有方法和属性。
如何设定私有熟悉和方法呢?
直接在属性和方法前加一个#如下
class Programmer extends Person{
#role;
constructor(name,gender,age,role){
super(name,gender,age);
this.role = role;
}
eating(){
alert("现在在吃饭");
}
sleeping(){
alert("现在在睡觉");
}
#coding(){
alert("现在在写代码");
}
}