关于这节课函数封装的问题
来源:4-4 自由编程
桐子酱Virginia
2023-02-18 16:33:54
老师好!关于这节课的函数封装方面,我有两个问题,麻烦老师看一下,谢谢~
我看视频里老师在操控图片切换功能的js文件(keyBoard.js)里先写了一个对象keyboard,然后把键盘操控图片切换的功能放到了这个对象里,变成了这个对象的一个方法(见下图)。想问下这样写到底是有何用意?为什么不直接把键盘操控图片切换的功能封装成一个独立的函数,然后在Slider类里直接引入这个函数呢?为什么还要再多一步创建对象的步骤?我自己试了把这个功能直接封装成一个独立函数,再引入Slider,发现也是OK的。

这个应该是在上一个问题的基础上更进一步的问题了。我看视频中老师在Slider类里没有直接使用键盘操控图片切换的方法(KeyBoard.bindEvent(this)),而是在它外面又封装了一个方法_bindEvent(),然后在constructor里调用的是_bindEvent()(如下图)。想问下为什么不直接一点,直接在constructor里调用KeyBoard.bindEvent(this),而还要再多去创建一个额外的方法_bindEvent()然后再去调用这个额外的方法呢?我在后面的编程练习中尝试着按我的想法,直接在constructor里调用操控图片切换的方法,发现也是OK的。所以想知道视频中老师那样看似多此一举的写法到底是有什么用意或好处呢?

1回答
同学你好,解答如下:
1、如同学所说不单独拿出来是ok的,课程中讲师我个人主观认为因为模块封装本身就是知识点,所以尽量多讲一些这样有助于学习。另对于模块拆分尽量做到拆的更“细致”一些这样有助于后期的搭配如,按照我们所想的键盘事件与图片切换封装到一起,那么假设后期键盘模块需要搭载其他的模块进行使用的时候,那么就会出现“多余”的图片切换。那么再去优化键盘模块的代码时会产生一些维护成本,并且模块的最大的长处就是按需引入,有需要在引入没有则不引入。
2、同学提出的进一步思想也是ok的,但这里有一个思想(个人主观思想,仅供参考)解除耦合,其意思是说在什么地方使用什么分开,如果直接KeyBoard.bindEvent(this)完全没问题,但对于silder来说尽量使用silder自己的方法,这样在后期维护的时候或者在阅读的时候可以更能分清它们的关系是什么样的。如在silder中使用的是silder自己的方法,如果出现问题定位起来会更加清晰等。
3、对于拆分我个人认为“按照当前自己理解的去拆分会更好”因为讲师的思路更多的是针对大型项目的工作经验,对于silder的封装完全就是“大厂”基础框架部分需要去做的事情,当然大厂的要求就是更讲细节。
所以不需要纠结,从同学提问的思路上来看,我认为同学已经掌握了课程的知识点。这就很不错。
祝学习愉快!
相似问题