你真的了解JS面向对象编程吗?

没有JS面向对象编程以前,我们都用的函数式编程,可是学习曲线陡峭、存在性能问题、不适用于所有问题、调试困难以及复用性低,那么如何解决这些问题呢?面向对象编程

一、什么叫Js面向对象编程?

是一种编程范式,它使用“对象”来模拟现实世界中的事物。现实事物都看成一个包罗万象的对象,具有各种属性、功能、方法对象

二、面向对象编程的优点有哪些?

它最大的特点是封装、继承、多态

    (1)封装:‌把事物看成一个对象,然后通过属性、方法等抽象封装,通过封装,‌可以保护对象的状态不被外部直接访问和修改,‌确保对象的安全性和稳定性,灵活性强,在保护内部不被修改的同时,方便使用。‌

  比如:vue2的组件把属性(name...)、方法(data())等封装为一个对象导出供外部使用,外部可根据自己需要灵活在其中定义自己需要的方法(比如可在mathods中定义handleClick)等

export default{

          name:"test",

          data():return{ name:""},

         methods:{

                 handleClick(){}

        }
}

  (2)继承:可以把子类共有的属性和方法抽取为一个父类,如果新的对象具有父类对同样的属性方法,可通过extends关键字去继承类的所有属性和方法,而不需要再重复定义。这样代码重用变得简单,‌子类可以继承父类的属性和方法,‌避免了重复编写相同的代码。‌当然也可以prototype去继承。

继承方法一:extends

例如:编写一个Animal类,它有name属性,同时有speak功能,但是同时Dog类也有以上的属性和功能,所有用extends继承,但是它的speak,它还可以根据需要重写自己的属性方法speak,还可以拓展自己的属性

  a)用extends继承

  b)需要重写自己的属性方法speak

  c)拓展自己的方法 jump

继承方法二:prototype

 

 (3)多态:‌通过多态,‌允许一个类或者方法被多种类型的对象使用,‌增加了代码的灵活性可扩展性

这里Dog、Cat都同时继承了Animal,但是调用jump传入不同类型,会展现不同的效果,这就是多态,代码灵活,可拓展性强,相互之间不会影响,如果还有不同的类型jump的效果不同,可在jump里面的case里面配置即可,相互不影响,也就是既独立又统一(独立:每个new的都是独立的对象,每个类又都是独立的;统一:都统一拥有父类的属性、方法,但是不同的类都通过同一个type参数去兼容)

  

三、面向对象编程的缺点及解决方案

   1、js面向对象编程常见的缺点

     (1)复杂的继承链可能导致难以理解的代码和性能问题

     (2)没有正式的接口约束,难以保证代码的正确性。

     (3)修改一个类可能会影响到继承该类的所有子类,造成破坏。

     (4)缺乏专门的打包工具或者标准库来帮助管理大型的面向对象项目。

     (5)对于简单的问题,使用面向对象编程可能会导致代码冗余和复杂度的增加

   2、解决方案

     (1)尽量保持继承层次浅,并使用mixin或组合来构建复杂的行为。

    (2)充分利用设计模式和原则,如单一职责原则、开放-封闭原则等,来保持类的职责单一,并减少修改类引起的问题。

   (3)对于大型项目,可以考虑使用依赖注入等技术来管理类之间的依赖关系。

   (4)简单问题,考虑使用函数式编程的方式,利用高阶函数、闭包等特性来简化代码。

总结:不管是函数式编程还是面向对象编程,都有其优缺点,简单问题建议可以使用函数式编程,复杂问题则要注意面向对象的抽象的使用。大家具体的要根据自己的业务场景选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值