面向过程和面向对象思想的区别
面向过程
程序 = 算法 + 语法;
算法:强调步骤,一步接一步
面向过程的缺陷:
1.随着问题规模的增加,代码逐渐难以控制
2.代码的复用性较差 只有函数可以复用
五子棋 围棋
a.绘制棋盘
b.黑棋落子
c.判断输赢
d.白棋落子
e.判断输赢
面向对象
程序 = 对象 + 对象 + ... + 对象;
对象:万物皆为对象
好处:
1.随着问题规模的增加,添加新的类型就可以了
棋子
棋盘
规则
悔棋
2.复用性大大提高
五子棋 围棋
棋子 棋子
棋盘 棋盘
规则 新规则
面向对象的三大特性:
封装:将若干函数和属性封装成一个整体
继承:将已有的类的属性和方法拿过来使用
多态:不同对象调用相同的函数执行不同的功能效果
类与对象
抽象:对事物加以描述的过程
描述的过程中有大量的名字和动词
名字:姓名 身高 体重 学号 --->属性
动词:唱 跳 rap 篮球 --->行为
类:拥有相同属性和行为的对象的集合(模板)
对象:类的实例化 (强调真实存在,唯一性)
ES5创建类
ES5中用函数来代替类的概念
这个函数也称为构造函数
类的定义
function Student(id,name,score){
this.id = id
this.name = name
this.score = score
this.singing = function(){
console.log(this.name + "唱")
}
this.dancing = function(){
console.log(this.name + "跳")
}
}
对象的创建
let s = new Student(1,"老王",100)
对象的使用
console.log(s.id)
console.log(s.name)
console.log(s.score)
s.singing()
s.dancing()
let s1 = new Student(2,"小王",99)
console.log(s1.id)
console.log(s1.name)
console.log(s1.score)
s1.singing()
s1.dancing()
this:
1.出现在事件体中,代表触发事件的元素本身
2.出现在普通方法中(除了事件体和构造方法),代表调用该方法的对象
3.出现在构造方法中的this,代表new出来的对象
普通函数和构造函数的区别
1.构造方法必须和new连用
2.构造方法习惯上函数名首字母大写
3.构造函数体内不能有返回值(因为默认返回的是new出来空间的地址)
ES6创建类
class 类名{
类体
constructor(){
属性的添加
}
方法的添加
}
class Student{
constructor(id,name,score){
this.id = id;
this.name = name;
this.score = score;
}
singing(){
console.log(this.name + "唱");
}
dancing(){
console.log(this.name + "跳");
}
}
let s = new Student(1,"老王",100);
console.log(s.id,s.name,s.score);
s.singing();
s.dancing();
类与类的关系
类和类的关系:组合
一个类的成员属性是另一个类的对象