面向对象三大特征:封装 继承 多态
es5面向对象
封装
说明:es5封装其实就是封装函数,封装好的函数就叫做构造函数,按照书写规范即属性一般写在构造函数内部,方法一般写在构造函数的原型上,如下实例:
function Parent(name,age){
this.name=name;
this.age=age;
}
Parent.prototype.getName=fuction(){
console.log(this.name);
}
Parent.prototype.getAge=fuction(){
console.log(this.age);
}
继承
说明:子构造函数继承父构造函数属性及方法。
继承父属性:只需要在子构造函数内部通过调用父构造函数并使用call bind apply三个api其中一个来改变this指向,指向子构造。
继承父方法:一般通过一个中间空构造函数,将父原型赋值给空构造函数原型,之后创建一个空构造函数的对象,将此对象赋值给子原型,这样便就很好的表达了继承父方法的效果。
function Son(name,age,id){
Parent.call(this,name,age);//继承属性
this.id=id;
}
function Fn(){};
Fn.prototype=Parent.prototype;
Son.prototype=new Fn();//继承方法
Son.prototype.getId=function(){
console.log(this.id);
}
创建对象
说明:使用new关键字
var xmy=new Sun('张三',20,1);
xmy.getName();//张三
xmy.getAge();//20
xmy.getId();//1
---------------------------------------------------------------------------------------------------
使用new关键字创建对象,对构造函数内部的影响:
1.构造函数内部会创建一个新的对象
2.this会指向这一新的的对象
3.会返回这一新的对象
es6面向对象
前言:由于es5中没有类的概念,所以我们在使用面向对象编程时稍有些麻烦,而恰好es6新规的出现,扩展了类的概念,这将给我们面向对象编程带来了巨大好处,请看下文。
封装
说明:即定义一个类,类中存放属性和方法,属性放在constructor内,方法和constructor同级,constructor实质就是一个构造器或叫做构造函数
class A{
constructor(name,age){
this.name=name;
this.age=age;
}
getName(){
console.log(this.name);
}
getAge(){
console.log(this.age);
}
}
继承
说明:使用super关键字实现完全继承父类。
注意:extends和super 是成对出现的,需要配合使用,才能实现继承
class B extends A{
constructor(name,age,id){
super(name,age);
this.id=id;
}
getId(){
console.log(this.id);
}
}
创建对象
说明:使用new关键字
var xmy=new B('张三',20,1);
xmy.getName();//张三
xmy.getAge();//20
xmy.getId();//1
---------------------------------------------------------------------------------------------------
使用new关键字创建对象,对构造函数内部的影响:
1.构造函数内部会创建一个新的对象
2.this会指向这一新的对象
3.会返回这一新的对象
es5和es6两种面向对象的方式而言,本人还是更偏向于es6,因为它实在是太方便了。
网友评论