likes
comments
collection
share

高质量代码指南:JavaScript封装思想

作者站长头像
站长
· 阅读数 25

故事引入

某日,国王决定举办一场盛大的音乐会,他想要组建一个壮观的合唱团来为这个盛会增添光彩。于是,国王下令让他的臣民们将王国中最优秀的鸭子和鸡加入到合唱团中,以展示王国的声乐实力。

编程转化

在这个王国里,有一位名叫小明的年轻人,他是一个热爱音乐的大自然爱好者。他听说了国王的招募消息,便心生一计,决定利用他的编程技能来帮助国王组建合唱团。在他的代码里,每一个具有 duckSign 方法的鸭子或者鸡都有资格加入合唱团。小明用一个循环来不断地将鸭子加入到合唱团,直到合唱团的人数接近满员。最后,当合唱团达到1000人的规模时,小明发出了报告,向国王宣告合唱团招募完成的好消息。

详细步骤

  • 首先定义了一个常量 choir,用来表示合唱团,初始化为空数组。

封装思想

  • 接着定义了两个对象 duck 和 chicken,它们都有一个名为 duckSign 的方法,用来模拟鸭子的叫声,判断该对象是不是鸭子。
            duckSign: function() {
                console.log('嘎嘎嘎');
            }
        }
        // 学外语
        const chicken = {
            duckSign: function() {
                console.log('嘎嘎嘎');
            }
        }
  • 然后定义了一个函数 joinChoir(animal),用来将动物加入合唱团。在该函数中,会检查传入的动物是否具有 duckSign 方法,并且不是 null 或 undefined,提高代码健壮性,如果满足条件,则将其加入合唱团数组,并输出一条恭喜信息。
  • 使用 for 循环调用 joinChoir(duck) 函数,向合唱团中添加 999 只鸭子。
  • 输出合唱团目前的成员数量。
  • 调用 joinChoir(chicken) 函数,试图将一只鸡加入合唱团。
  • 最后检查合唱团的成员数量是否达到了1000,如果是,则输出报告国王合唱团招聘完成的信息。
function joinChoir(animal) {
            // 严谨性 加入合唱团的要求 
            if (animal && typeof animal.duckSign == 'function') {
                choir.push(duck);
            }
            console.log('恭喜加入合唱团')
        }
        for (let i = 0; i < 999; i++) {
            joinChoir(duck) 
        }
        console.log('合唱团已有' + choir.length + '位成员');
        joinChoir(chicken);
        if (choir.length === 1000) {
            console.log('报告国王, 合唱团招聘完成');
        }
        

思考

为什么能将鸡对象加入至合唱团呢?鸡对象和鸭对象难道是同一对象吗?其实在js中是基于原型式的面向对象。js是弱类型的,在上述代码中判断鸡和鸭是不是同一对象的判断标准是看两个对象中是否具有相同的duckSing方法,如果这两个对象都有duckSing方法则认为是同一对象。这也正是JavaScript拥有强表现力的体现。

        if (choir.length === 1000) {
            console.log('报告国王, 合唱团招聘完成');
        }

运行结果

高质量代码指南:JavaScript封装思想

转载自:https://juejin.cn/post/7358631616770637864
评论
请登录