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

查看:82
本文介绍了javascript - js的函数与对象有一个不明白的地方的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

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

解决方案

关于构造函数+对象,你其实缺的是有关类的知识,关于这个,我在求问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 run
dog.move();//I am dog, i can run

两个不同的类,catdog,都调用了move方法,参数都没有传,但显然输出内容不一样了,因为这里依赖了上下文this.type。但这样一个动物的使用场景,如果改用函数,怎么描述一个猫更合适?显然比较困难

再次补充:

最后再谈几句关于模块的事情,模块通常用来组织代码,和函数、类是不同纬度的工具,举个例子:

java 9中,模块类似命名空间,可以把若干有逻辑关联的类归在同一个模块下,方便他人使用(这里的方便他人使用,就是组织相关的工作)。

又或者,在javascript中,模块可以是一个函数(例如之前很火的left-pad),也可以是一个类(比如:bl)甚至可以是一大堆函数和类的集合(比如:express)。完全取决于你希望你的代码怎么样被组织、使用

这篇关于javascript - js的函数与对象有一个不明白的地方的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆