Js:面向对象的特点

一、封装:安全性

https://www.bilibili.com/video/BV1mG411h7aD?spm_id_from=333.788.player.switch&vd_source=d88f9fa9e66ff0846d79ff1483b7a0d4&p=77

二、继承:扩展性

可以通过 extends 关键字实现继承

1、减少重复的代码:

class Animals { // 父类(超类)
    constructor(name,age){
        this.name = name;
        this.age = age;
    }
    run(){
        console.log('跑')
    }
}

class Dog extends Animals { // 子类,将 Animals 类中的代码复制到 Dog 类中
}
class Cat extends Animals { // 子类,将 Animals 类中的代码复制到 Cat 类中
}

let dog = new Dog('大黄',2)
let cat = new Cat('喵喵',3)
console.log(dog)
console.log(cat)

2、在不修改一个类的情况下,对其进行扩展: OCP原则

重写父类中的方法

// 父类(超类)
class Animals {
    constructor(name,age){
        this.name = name;
        this.age = age;
    }
    run(){
        console.log('跑')
    }
}
// 子类
class Dog extends Animals {
    // 定义一个和父类同名的函数,来重写父类中的方法
    run(){
        console.log('狗狗在跑')
    }
}
class Cat extends Animals {
    // 定义一个和父类同名的函数,来重写父类中的方法
    run(){
        console.log('猫猫在跑')
    }
}

let dog = new Dog('大黄',2)
let cat = new Cat('喵喵',3)
dog.run()
cat.run()

重写父类的构造函数 / 在子类的构造函数中新增属性

// 父类(超类)
class Animals {
     constructor(name,age){
         this.name = name;
         this.age = age;
     }
     run(){
         console.log('跑')
     }
 }
 // 子类
 class Dog extends Animals {
     constructor(name,age,gender){
         // 重写构造函数时,构造函数的第一行必须是super()
         super(name,age) // 调用父类的构造函数,并且将原本的参数传入
         this.gender = gender
     }
 }
 class Cat extends Animals {
     // 定义一个和父类同名的函数,来重写父类中的方法
     run(){
         console.log('猫猫在跑')
         // 调用父类中的方法
         super.run()
     }
 }

 let dog = new Dog('大黄',2,'公') // 前两个参数传给了父类的构造函数
 let cat = new Cat('喵喵',3)
 console.log(dog)
 cat.run()

三、多态:给代码提供了灵活性

多态是指参数的多态,即很多个对象都可以调用同一个方法。在该方法中,不对入参的类型进行限制,只需要满足某些条件,就能够返回不同的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值