猿问

js的函数与对象有一个不明白的地方

函数可以理解为需要重复执行的代码块。不同的地方可以进行传参。
构造函数加new关键字似乎可以起到函数相似的作用。
我想问的是,函数与构造函数+对象这两种有什么相同点和不同点。
什么时候使用函数?什么时候使用构造函数+对象的形式。

大话西游666
浏览 540回答 1
1回答

ITMISS

关于“构造函数+对象”,你其实缺的是有关“类”的知识,关于这个,我在求问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)。完全取决于你希望你的代码怎么样被组织、使用
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答