1 回答
![?](http://img1.sycdn.imooc.com/545865470001bf9402200220-100-100.jpg)
TA贡献1871条经验 获得超8个赞
关于“构造函数+对象”,你其实缺的是有关“类”的知识,关于这个,我在求问js 中的类究竟是什么意思?已经答过,自己阅读吧
补充:
如果你懂“类”是什么,那这个问题本来就不应该存在了。秉承好人做到底的原则,还是简单说两句吧。
虽然无论函数,还是类都讲求单一职责,但显然力度不同。当我们使用函数时,通常希望这个函数是“单纯的”,即:不依赖上下文,譬如:
var sum = function(x, y){ return x + y; };
这个函数只要我输入的参数是
2, 3
,返回值永远都是5
。可测试、可预料。简单直接(当然函数也可以完成先对复杂的工作,这个就看写作人对需求的认识、对代码的理解了)
而当面对“类”时,她是完全“不单纯”的,即:“类”就是创造了一个上下文,供各个实例对象使用;为什么要提供上下文,是因为“类”提供的是一系列相关行为,单一职责在这里显然力度更广,为什么是一系列行为,这其实就是人们常说的“高内聚”。打个比方,我现在写一个动物类:
class Animal { constructor(type){ this.type = type; } movo(){ console.log(`I am ${this.type}, i can run`); } }var cat = new Animal('cat');var dog = new Animal('dog'); cat.move();//I am cat, i can rundog.move();//I am dog, i can run
两个不同的类,
cat
和dog
,都调用了move
方法,参数都没有传,但显然输出内容不一样了,因为这里依赖了上下文this.type
。但这样一个“动物”的使用场景,如果改用函数,怎么描述一个“猫”更合适?显然比较困难
再次补充:
最后再谈几句关于模块的事情,模块通常用来组织代码,和函数、类是不同纬度的工具,举个例子:
在java 9
中,模块类似命名空间,可以把若干有逻辑关联的类归在同一个模块下,方便他人使用(这里的方便他人使用,就是“组织”相关的工作)。
又或者,在javascript
中,模块可以是一个函数(例如之前很火的left-pad),也可以是一个类(比如:bl)甚至可以是一大堆函数和类的集合(比如:express)。完全取决于你希望你的代码怎么样被组织、使用
添加回答
举报