JavaScript学习笔记---⾯向对象编程-ES6(pink⽼师)⼀、⾯向对象编程介绍
1.1 两⼤编程思想
1.⾯向过程编程POP(Process-Oriented Programming)
⾯向过程就是分析出解决问题所需要的步骤,然后⽤函数把这些步骤⼀步⼀ 步实现 ,使⽤的时候再⼀个⼀ 个的依次调⽤就可以了。举个栗⼦:将⼤象装进冰箱,⾯向过程做法。
⾯向过程,就是按照我们分析好了的步骤,按照步骤解决问题。
2.⾯向对象编程OOP(Object Oriented Programming)
⾯向对象是把事务分解成为⼀个个对象,然后由对象之间分⼯与合作。
举个栗⼦:将⼤象装进冰箱,⾯向对象做法。
先出对象,并写出这些对象的功能:
1.⼤象对象
进去
2.冰箱对象
打开
关闭
3.使⽤⼤象和冰箱的功能
⾯向对象是以对象功能来划分问题,⽽不是步骤。
在⾯向对象程序开发思想中,每⼀⼀个对象都是功能中⼼,具有明确分⼯。
⾯向对象编程具有灵活、代码可复⽤、容易维护和开发的优点,更适合多⼈合作的⼤型软件项⽬。
⾯向对象的特性:
封装性.
继承性
多态性
3.⾯向过程和⾯向对象的对⽐
⼆、ES6中的类和对象
⾯向对象
⾯向对象更贴近我们的实际⽣活,可以使⽤⾯向对象描述现实世界事物.但是事物分为具体的事物和抽象的事物。
⾯向对象的思维特点:
1. 抽取(抽象)对象共⽤的属性和⾏为组织(封装)成⼀个类(模板)
2. 对类进⾏实例化,获取类的对象
⾯向对象编程:我们考虑的是有哪些对象,按照⾯向对象的思维特点不断的创建对象、使⽤对象、指挥对象做事情。
2.1 对象
现实⽣活中:万物皆对象,对象是⼀个具体的事物,看得见摸得着的实物。例如,⼀本书、⼀辆汽车、 ⼀个⼈可以是“对象”,⼀个数据库、⼀张⽹页、 ⼀个与远程服务器的连接也可以是“对象”。
在JavaScript中,对象是⼀组⽆序的相关属性和⽅法的集合,所有的事物都是对象,例如字符串、数值、数组、函数等。
对象是由属性和⽅法组成的:
属性:事物的特征,在对象中⽤属性来表⽰(常⽤名词)
⽅法:事物的⾏为,在对象中⽤⽅法来表⽰(常⽤动词)
2.2 类 class
在ES6中新增加了类的概念,可以使⽤class关键字声明⼀个类,之后以这个类来实例化对象。
类抽象了对象的公共部分,它泛指某⼀⼤类( class)
对象特指某⼀个,通过类实例化⼀个具体的对象
2.3 创建类
语法:
//class body
}
创建实例:
var xx = new name();
注意:类必须使⽤new实例化对象
2.4 类 constructor 构造函数
constructor() ⽅法是类的构造函数(默认⽅法),⽤于传递参数,返回实例对象,通过 new 命令⽣成对象实例时,⾃动调⽤该⽅法。如果没有显⽰定义, 类内部会⾃动给我们创建⼀个constructor()。
<script>
//1.创建类 class 创建⼀个明星类
class Star {
constructor(uname,age){//类⾥⾯的构造函数
this.uname = uname;
this.age = age;
}
}
//2.利⽤类创建对象new
var ldh= new Star('刘德华',18);
var zxy= new Star('张学友',20);
console.log(ldh);
console.log(zxy);
</script>
1. 通过 class 关键字创建类,类名我们还是习惯性定义⾸字母⼤写
2. 类⾥⾯有个 constructor函数,可以接收传递过来的参数,同时返回实例对象
3. constructor函数只要 new ⽣成实例时,就会⾃动调⽤这个函数,如果我们不写这个函数,类也会⾃动⽣成这个函数
4. ⽣成实例 new 不能省略
5. 最后注意语法规范,创建类--类名后⾯不要加⼩括号,⽣成实例--类名后⾯加⼩括号,构造函数不需要加 function 关键字
2.5 类中添加⽅法
语法规范:
//1.创建类 class 创建⼀个明星类
class Star {
//类的共有属性放到 constructor ⾥⾯
constructor(uname,age){//类⾥⾯的构造函数
this.uname = uname;
this.age = age;
}
say(){
console.log(this.uname + '你好');
}
}
⽰例:
//1.创建类 class 创建⼀个明星类
class Star {
//类的共有属性放到 constructor ⾥⾯
constructor(uname,age){//类⾥⾯的构造函数
this.uname = uname;
this.age = age;
}
say(){
console.log(this.uname + '你好');
}
sing(song){
console.log(this.uname + song);
}
}
//2.利⽤类创建对象new
var ldh= new Star('刘德华',18);
var zxy= new Star('张学友',20);
console.log(ldh);
console.log(zxy);
//我们类⾥⾯所有的函数不需要写function
//多个函数⽅法之间不需要添加逗号分割
ldh.say();
zxy.say();
学javascript前要学什么ldh.sing('冰⾬');
</script>
三、类的继承
3.1 继承
现实中的继承:⼦承⽗业,⽐如我们都继承了⽗亲的姓。程序中的继承:⼦类可以继承⽗类中的⼀些属性和⽅法。语法:
class Father{//⽗类
}
class Son extends Father{//⼦类继承⽗类
}
⽰例:
class Father{//⽗类
constructor(){
}
money(){
console.log(100);
}
}
class Son extends Father{//⼦类继承⽗类
}
var son = new Son();
<();
3.2 super关键字
super 关键字⽤于访问和调⽤对象⽗类上的函数,可以调⽤⽗类的构造函数,也可以调⽤⽗类的普通函数。
1. super 关键字调⽤⽗类的构造函数
class Father {
constructor(x,y){
this.x = x;
this.y = y;
}
sum(){
console.log(this.x + this.y);
}
}
class Son extends Father {
constructor(x,y){
super(x,y);//调⽤了⽗类中的构造函数
}
}
var son = new Son(1,2);
var son1 = new Son(11,22);
son.sum();
son1.sum();
2. super 关键字调⽤⽗类的普通函数
语法:
/
/ ⽗类
class Person {
constructor(surname){
this.surname = surname;
}
}
// ⼦类继承⽗类
class Student entends Person {
constructor(surname,firstname) {
super(surname);    //调⽤⽗类的 constructor(surname)
this.firstname = firstname;  //定义⼦类独有的属性
}
}
⽰例:
//super关键字调⽤⽗类普通函数
class Father {
say(){
return '我是爸爸';
}
}
class Son extends Father {
say(){
/
/ console.log('我是⼉⼦');
console.log(super.say()+'的⼉⼦');
// super.say()就是调⽤⽗类中的普通函数 say()
}
}
var son = new Son();
son.say();
继承中,如果实例化⼦类输出⼀个⽅法,先看⼦类有没有这个⽅法,如果有就先执⾏⼦类的

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。