函数可以理解为需要重复执行的代码块。不同的地方可以进行传参。
构造函数加new关键字似乎可以起到函数相似的作用。
我想问的是,函数与构造函数+对象这两种有什么相同点和不同点。
什么时候使用函数?什么时候使用构造函数+对象的形式。
函数可以理解为需要重复执行的代码块。不同的地方可以进行传参。
构造函数加new关键字似乎可以起到函数相似的作用。
我想问的是,函数与构造函数+对象这两种有什么相同点和不同点。
什么时候使用函数?什么时候使用构造函数+对象的形式。
构造函数加new传进参数,返回一个对象,而函数本身也是传进参数,返回一个对象,这点上来说两者的功能是一样的,然而实际上new操作符具有绑定this的作用。换句话说,你直接调用函数,你在函数里面的this指向你所在的对象,但是如果使用new来“构造调用”一个构造函数的话,构造函数的this指向返回的那个对象,也就是你需要创建的那个对象。(部分摘自Kyle Simpson的话)
然而这并没有带来什么好处,DC大神认为,new是JavaScript的糟粕之一,最好不要去使用。
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
关于“构造函数+对象”,你其实缺的是有关“类”的知识,关于这个,我在求问js 中的类究竟是什么意思?已经答过,自己阅读吧
补充:
如果你懂“类”是什么,那这个问题本来就不应该存在了。秉承好人做到底的原则,还是简单说两句吧。
虽然无论函数,还是类都讲求单一职责,但显然力度不同。当我们使用函数时,通常希望这个函数是“单纯的”,即:不依赖上下文,譬如:
而当面对“类”时,她是完全“不单纯”的,即:“类”就是创造了一个上下文,供各个实例对象使用;为什么要提供上下文,是因为“类”提供的是一系列相关行为,单一职责在这里显然力度更广,为什么是一系列行为,这其实就是人们常说的“高内聚”。打个比方,我现在写一个动物类:
再次补充:
最后再谈几句关于模块的事情,模块通常用来组织代码,和函数、类是不同纬度的工具,举个例子:
在
java 9
中,模块类似命名空间,可以把若干有逻辑关联的类归在同一个模块下,方便他人使用(这里的方便他人使用,就是“组织”相关的工作)。又或者,在
javascript
中,模块可以是一个函数(例如之前很火的left-pad),也可以是一个类(比如:bl)甚至可以是一大堆函数和类的集合(比如:express)。完全取决于你希望你的代码怎么样被组织、使用