优缺点 | 面向对象 | 面向过程 |
---|---|---|
优点 | 易维护,易复用、易扩展,由于面向对象有封装、继承、多态的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护 | 性能比面向对象高,适合跟硬件联系很紧密的东西,例如单片机就采用的面向过程的编程 |
缺点 | 性能比面向过程低 | 没有面向对象易维护、易复用、易扩展 |
面向对象更加贴近实际生活,可以用面向对象的描述现实世界十五,但事物分为具体的事物和抽象的事物。
1.抽取对象共同的属性和行为(封装)成一个类(模板); 2.对类进行实例化,获取类的对象。 面向对象编程考虑的是有哪些对象,按照面向对象的思维特点,不断的创建对象。
对象是一个具体的事物,在javascript中,对象是一组无序的相关属性和方法的集合,所有的事物都是对象。 例如字符串、数值、数组、函数等
属性:事物的特征,在对象中用属性来表示。(名称)
方法:事物的行为,在对象中用方法来表示。(动词)
类抽象了对象的公共部分,它泛指某一大类(class)对象特指某一个,通过类实例化一个具体的对象。 类抽象了对象的公共部分,它泛指某一大类(class)。
对象特指某一个, 通过类实例化一个具体的对象。
// 创建一个class 创建一个明星类
1.通过类class关键字创建,类名习惯定义首字母大写
class Star {
2.constructor 函数,可以接收传递过来的参数,同时返回实例对象
3.constructor 函数,只要new 生成实例时,就会自动调用这个函数,如果不写这个函数,也会自动生成这个函数
constructor(uname,age){
this.uname = uname;
this.age = age;
}
}
4.生成实例 new 不能省略
// 利用类创建对象 new
var ldh = new Star('刘德华',20);
var zxy = new Star('张学友',30);
5.最后注意语法规范,创建类名后面不要加小括号,生成实例类名后面加小括号,构造函数不需要加function
console.log(ldh);
console.log(zxy.uname);
--------------
class Star {
constructor(uname ,age ){
this.uname = uname;
this.age = age;
}song
sing(song){
console.log(this.uname + song);
}
}
var ldh = new Star ('刘德华', 18);
var zxy = new Star('张学友', 20);
ldh.sing('丙戌');
zxy.sing('李香兰');
子类可以继承父类的属性
class Father {
constructor(){
}
money(){
console.log(100);
}
}
class Son extends Father {
}
var son = new Son();
son.money();
1.在es6中,类没有变量提升,所以必须先定义类,才能通过类实例化对象;
2.类里面的共有属性和方法一定要加this使用;
3.类里面的this只想问题;
4.constructor里面的this指向实例对象,方法里面您的this指向这个方法的调用者。