写程序,很追求一次编写,多次重用。对于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的类还有命名空间的作用。比起全局范围中的函数,类中的方法很不容易和别的函数重名,就算重名了,只要改一个实例化时的对象名,就可以了。