zoukankan      html  css  js  c++  java
  • js的oop和函数式编程的思考

        写程序,很追求一次编写,多次重用。对于js也不例外。

        可是,如果只是为了重用,我们写个function,然后留出参数,以后需要重用,通过传入不同参数到function里,就完全可以实现重用了。那么为什么我们还要用oop来写js呢?用oop的方式,我们其实也是通过传参数到function中,来实现实例化不同对象的目的的。oop方式和普通function相比有什么优点呢?

        我感觉最大的优点在于对代码的封装性。如果只是一个简单的功能,没必要用oop,因为几乎没有区别。可是,如果是几个相关的函数来实现一个功能,那么oop的优点就表现出来了。举个例子:

    var c;

    function a()

    {

        doA(c);

    }

    function b()

    {

        doB(c);

    }

    如果我们需要实现一个功能,功能中需要用于a(),b()来操作同一个变量c,那c就只能定义在a()和b()的外面,定义成一个全局变量。这样,他的作用域才会同时到达a()和b()。可是,如果就这样把c写在所有函数外,他就成了一个全局变量,一个作用域大到你控制不了程度。如果是大团队合作,分工做模块,很可能这个c,就和别人在另一个地方定义的c冲突了。然后出现意想不出的错误。全局变量是一种污染,是很不好的作法。那么,怎么做比较好呢?用oop的方式就可以解决这个问题。

    function d()

    {

       this.c = c;

       this.doA = fuction(){this.c};

        this.doB = fuction(){this.c}

    }

    通过this关键字,方法doA()和doB()都可以找到c,而c又只在类d里,没有造成全局变量污染。这就达到了很好的封装效果。另外,还有很重要的一点是,oop的类还有命名空间的作用。比起全局范围中的函数,类中的方法很不容易和别的函数重名,就算重名了,只要改一个实例化时的对象名,就可以了。

  • 相关阅读:
    重构该何时登场
    重构
    中国剩余定理
    连分数的应用
    连分数的性质
    有限连分数与欧几里德除法的联系
    连分数
    费马大定理
    P4178 Tree 点分治
    LOJ 6029. 「雅礼集训 2017 Day1」市场
  • 原文地址:https://www.cnblogs.com/cly84920/p/4427147.html
Copyright © 2011-2022 走看看