两大编程思想
面向过程
面向对象
编程思想概念
1.面向过程
分析解决问题所需的步骤,然后用函数把这些步骤一步一步实现,使用的时候在一个一个依次调用
面向过程就是按照我们分析的步骤,按照步骤解决问题
2.面向对象
面向对象就是把事物分解为一个一个对象,然后对象之间分工与合作
先找出对象,并写出这些对象的功能
面向对象是以对象功能来划分问题,而不是步骤
面向对象更贴近我们的实际生活,可以使用面向对象描述现实世界事物
面向对象编程的特性
封装性
继承性
多态性
面向对象与面向过程对比
面向对象的思维特点
1.抽取(抽象)对象共用属性和行为组织(封装)成一个类(模板)
2.对类进行实例化,获取类的对象
对象
对象就是一个具体的事物
对象是由属性和方法组成的
属性:事物的特征,在对象中用属性来表示
方法:事物的行为,在对象中用方法来表示
类
使用class关键字声明一个类,然后用类来实例化对象
类抽象了对象的公共部分,泛指某一大类
对象特指某一个,通过类实例化一个具体的对象
创建类
语法:
class 类名 { //class body }
创建实例:
var 对象名 = new 类名();
类必须使用new实例化对象
类的构造函数 constructor
constructor()方法是类的构造函数(默认方法),用于传递参数,返回实例对象,通过new命令生成实例对象时自动调用该方法
如果没有显示定义,类内部会自动创建一个constructor()
//创建一个明星类 class Star { //显示定义一个构造函数 constructor( s_name ) { this.s_name = s_name; } } //利用明星类实例化一个明星对象 var ldh = new Star("刘德华"); console.log( ldh.s_name );
类名习惯首字母大写
类的构造函数,可以接受传递过来的参数,返回给实例化的对象
类添加方法
class Person { constructor(name, age) { this.name = name; this.age = age; } //类方法 //类里面的方法不需要写function say() { console.log( this.name + " " + "你好" ); } } var p = new Person( "tom", 12 ); p.say();
类的继承
子类可以继承父类的一些属性和方法
语法:
class 父类名 { } class 子类名 extends 父类名 { }
super关键字
super关键字用于访问和调用父类的函数,可以调用父类的构造函数和普通函数
class Father { constructor(f_name) { this.f_name = f_name; } say() { console.log(this.f_name); } } class Son extends Father{ constructor(s_name) { super(s_name); } say() { super.say(); } }
实例化子类调用方法,会先看子类是否有这个方法,没有会调用父类的方法
原则为就近原则
如果父类也没有会报错