编程思想
面向过程: POP(Process-oriented programming)
优点: 性能比面向对象高,步骤联系紧密
缺点: 不好维护,不易多次使用及扩展
面向对象: OOP(Object Oriented Programming)
优点: 易维护,可复用, 可扩展, 灵活性高
缺点: 性能没有面向过程高
面向对象是将事务分解成为一个个对象,然后由对象之间分工与合作
面向对象三大特性
- 封装性
- 继承性
- 多态性
ES(ECMAscript)6中类和对象
类(抽象) : 泛指大面积相同类型
属性: 共有属性
方法: 共有方法
对象(具体) : 类中具体的某一个实例
- 属性: 对象有什么,固有的东西(访问)
语法: 对象.属性- 方法: 对象做什么,要去做什么(执行)
语法: 对象.方法()
1. 创建类
语法: class 类名{属性和方法} //类名首字母大写,公共属性和方法
构造函数 // 只要对类实例化 就可以得到一个对象
class Star{}
var obj = new Star();
对象 instanceof 构造函数
arr instanceof Array;// 判断arr是否是数组
2. 类constructor构造函数
构造函数就是用来添加属性的
类中所有的函数,不带function,直接写即可
语法: //属性要放到构造函数中constructor
class Star{
constructor(uname,age,sex){
this.uname = 属性值;
this.age = 属性值;
}
}
var obj = new Star('丢丢',18,'男');
console.log(obj);
var obj2 = new Star('洛洛',17,'女');
console.log(obj2);
//属性名和属性值写成一个,便于记忆;
this: 当前实例对象
Star: 类
uname,age,sex: 形参
//每次new一个类就会自动执行构造函数,构造函数中的this,代表的是当前new的实例对象,new谁this就代表谁
3. 类添加方法
class Star {
//属性
constructor(){}
//方法
方法名(函数名)(){
}
}
4. 类的继承
extends 继承
class Father{// 父类
constructor(uname,age){
this.uname = uname;
this.age = age;
}
}
class Son extends Father{// 子类
//怎么继承父class属性?
}
var obj = new Son();
super关键字 = 以调用父类的构造函数和普通函数
如果子类有自己的构造函数时,想要继承父类函数就用super,调用父类构造函数和方法
super(父类传参); //既可以继承,又可以有自己的属性
要想调用父类的同名方法时,用super.方法名()
如果子类不写东西,那么直接继承父类就可以用,但是如果子类有自己的构造函数和父类同名的方法,此时不可以直接用父类的东西,需要用super调用父类的方法和构造函数.
ES6 三个注意点
- 没有域解析,不会变量提升,必须要先定义类,再去实例化对象
- 在类里面调用属性或者方法一定要用this调用
- 不论在哪里调用属性和方法,都要加上对象.属性(方法)
- this指向: 是函数就可以加this
- 构造函数里面的this指向一定是当前实例化对象
- 方法里面的this,是调用者, 谁调用this指的就是谁
ES(ECMAscript)5中类和对象
- 创建对象
字面量创建对象
var obj = {
name:'小狗',
age:22,
sex: '男',
fn: function(){
console.log('哈哈哈');
}
}// 方法: 加括号即调用,不加括号即访问
构造函数创建对象 //构造函数 = Object
var obj = new Object();
obj.uname = '小新';
// 系统自带对象属性Object
- 自定义构造函数
function Star(uname,age)
this.uname = uname;
this.age = age;
}
var obj = new Star('海绵宝宝',5);
1. 自定义构造函数本质还是一个函数
2. 自定义构造函数可以写多个,Object只有一个
3. 构造函数和new一起使用才有意义,对象碰到new,就会有独立空间
静态成员和实例成员
构成对象属性和方法,就叫成员
- 在构造函数身上的成员叫静态成员
- 静态成员只能由构造函数访问
在构造函数内部的成员叫实例成员
- 实例成员只能由实例对象访问
- 属性是简单数据类型