JavaScript面向对象编程

什么是面向对象

就是把客观对象抽象成属性数据和对数据的相关操作,把内部细节和不想关的信息隐藏起来,把同一个类型的客观对象的属性数据和操作绑定在一起,封装成类,并且允许分成不同层次进行抽象,通过继承实现属性和操作的共享。

  • 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。

  • 面向对象是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

面向对象有三大特征:封装、继承、多态。

1.封装
封装就是对象内部的变化对外界是透明的,不可见的。使用封装,可以达到代码的复用,使代码更加简洁,不会重复写很多的代码,减少代码冗余。

   	class Person{
        constructor(name,age){
            this.name = name;
            this.age = age;
        }
        showInfo(){
            console.log("我叫" + this.name + ",今年" + this.age + "岁。");
        }
    }
    let p1 = new Person("小红", 18);
    p1.showInfo(); //我叫小红,今年18岁。
    let p2 = new Person("小蓝", 17);
    p2.showInfo(); //我叫小蓝,今年17岁。

2.继承
继承可以使得子类具有父类的各种的公有属性和公有方法。而不需要再次编写相同的代码。在令子类别继承父类别的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类别的原有属性和方法,使其获得与父类别不同的功能。

	    class Father{
        constructor(name){
            this.name = name;
        }
        asset(){
            console.log("我家有台40寸电视机");
        }
        getName(){
            console.log("我是"+this.name);
        }
        // 静态方法不会被继承
        static personal(){
            console.log("我不用上学");
        }
    }
    class son extends Father{
        constructor(name,age){
            super(name);
            this.age = age;
        }
        getAge(){
            console.log("我今年"+this.age+"岁");
            
        }
    }
    let s = new son("儿子",19);
    //继承之后可以调用父类的方法
    s.getName();//我是儿子
    s.asset();//我家有台40寸电视机
    //子类的方法
    s.getAge(); //我今年19岁
    //静态方法不会被继承
    s.personal(); // s.personal is not a function   报错没有这个方法

3.多态
多态就是相同的事物,调用其相同的方法,参数也相同时,但表现的行为却不同。多态的具体表现为方法重载和方法重写

下面在添加一个增加task的方法重写。

    class Father{
    constructor(name){
        this.name = name;
        
    }
    asset(){
        console.log("我家有台40寸电视机");
    }
    getName(){
        console.log("我是"+this.name);
    }
    // 静态方法不会被继承
    static personal(){
        console.log("我不用上学");
    }
    task(){
        console.log("我的任务是上班赚钱");
    }
}

class son extends Father{
    constructor(name,age){
        super(name);
        this.age = age;
    }
    getAge(){
        console.log("我今年"+this.age+"岁");
    }
    // 重写方法
    task(){
        console.log("我的任务是好好学习");
    }
}
let f = new Father("父亲");

f.getName(); //我是父亲

f.task(); //我的任务是上班赚钱

let s = new son("儿子",19);

s.getName();//我是儿子

//因为重写了方法,由“我的任务是上班赚钱”,变成了“我的任务是好好学习”。
s.task(); //我的任务是好好学习

三大特征的优点:

封装:封装的优势在于定义只可以在类内部进行对属性的操作,外部无法对这些属性修改,只能通过你定义的封装方法;

继承:继承减少了代码的冗余,省略了很多重复代码,开发者可以从父类底层定义所有子类必须有的属性和方法,以达到耦合的目的;

多态:多态实现了方法的个性化,不同的子类根据具体状况可以实现不同的方法.

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值