老师,能不能给我讲一下这个显示封装的思路

老师,能不能给我讲一下这个显示封装的思路

视频中老师讲的内容,我思路上跟不上,听到云里雾里不是很明白。

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,

可以参考如下代码注释,进行理解哈。

 $.fn.extend({
        //在jq原型上扩展一个方法,对外可以直接调用showHide
        //方法中有一个参数
        showHide: function(option) {
            //将调用方法的元素进行循环遍历,有可能是多个元素
            return this.each(function() {
                // 将循环的每一个元素赋值给$this变量
                var $this = $(this),
                    // 检测传入的参数option是否是一个对象,如果是的话,和默认的参数default合并成一个对象,再赋值给options参数,也就是下面的参数:
                    // $box.showHide({
                    //     css3: true,
                    //     js: false,
                    //     animation: 'slideUpDown'
                    // });
                    options = $.extend({}, defaults, typeof option === 'object' && option),
                    // 通过data方法获取showHide属性值
                    mode = $this.data('showHide');
 
                //如果开始mode没有值的话,也就是undefined,说明元素之前没有使用data添加过这个属性
                if (!mode) {
                    //使用data方法添加上showHide属性,属性值是调用showHide方法返回出来的一个对象,里面有两个方法
                    // return {
                    //     show: $.proxy(mode.show, this, $elem),
                    //     hide: $.proxy(mode.hide, this, $elem)
                    // };
                    $this.data('showHide', mode = showHide($this, options));
                }
                //如果mode有值,说明已经添加过这个属性了,通过传入的参数也就是mode对象的属性名检测是否是一个函数,如果是的话调用这个方法即可,也就是下面的传参:
                //  $('#btn-hide').on('click', function() {
 
                //     $box.showHide('hide');
 
                // });
 
                if (typeof mode[option] === 'function') {
                    mode[option]();
                }
            });
        }
    });

组件化开发本就是企业级开发思想和流程重点部分,同学一定要多听,多练哈。

如果我的回答帮助了你,欢迎采纳,祝学习愉快~


  • V仔兽7022 提问者 #1
    options = $.extend({}, defaults, typeof option === 'object' && option)这句是什么意思呀?
    2019-09-02 16:58:48
  • 好帮手慕嘟嘟 回复 提问者 V仔兽7022 #2
    同学你好,1,先分析一下这句话:option === 'object' && option;option传的不一定是对象,也有可能是一个字符串,所以就需要进行判断,如果传入的是一个对象,那么前面就是true,就会执行后面的option,如果传入的不是一个对象,那么前面就false,执行短路运算符,就把false传进来,就表示不使用外部传入的参数了,因此只有是对象的时候才会使用外部传入的参数。2,分析一下整体:options = $.extend({}, defaults, typeof option === 'object' && option);检测传入的参数option是否是一个对象,如果是的话,和默认的参数default合并成一个对象,再赋值给options参数。希望能帮到你。
    2019-09-02 18:44:20
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师