框架封装基础

解决污染的几种方式

    污染:全局变量!  
  • 函数

    把所有的全局函数和变量使用一个函数包裹,这样的话对全局的污染源就只有一个    
    
  • 对象

    把所有的属性和函数设置给一个对象,然后通过对象访问属性和方法  
    
  • 立即函数(匿名函数)

  • 将我们需要的值赋值给任意一个全局变量,使其成为这个变量的值/方法

    • 存在的问题:无法在外部使用函数内部定义的变量和函数
    • 解决方法:

      • 将我们需要的值/方法赋值给window,使其成为一个window对象的属性或者方法 ;也就是把所有的属性和方法挂在一个对象,然后让这个对象成为window的属性,
      //通过传参,可以让程序减少查找过程 优化代码
      (function(win){
          var name = 'leo',
              age = 18,
              say = function(){
                  console.log('say hello world')
              },
              json = {
                  name : name,
                  age : age,
                  say : say
              };
      
              window[json] = json;
      })(window)
  • return

    • 必须定义一个变量接收
    • 在内部定义在内部定义一个return 对象,
    • 然后 通过变量访问需要的内容
  • 零污染框架雏形

    (function(win){
        var $$ = {
            //我是封装的框架
        }
    
        win.$ = $$
    })(window)
    

模块化

  • 模块化的好处

    主要解决命名冲突的,文件依赖的问题
    
  • 基于文件的模块化

  • 命名空间的模块化

    (function(win){
        /*框架最顶层*/
        var $l = {}
    
        /*公共模块*/
        $l.common = {}
    
        /*字符串*/
        $l.common.str = {}
    
        /*数组*/
        $l.common.arr = {}
    
        /*数字*/
        $l.common.num = {}
    
        /*判断类型*/
        $l.common.type = {}
    
        /*事件*/
        $l.common.event = {}
    
        /*选择*/
        $l.common.selector = {}
    
        /*css*/
        $l.common.css = {}
    
        /*属性*/
        $l.common.attr = {}
    
        /*内容*/
        $l.common.html = {}
    
        /*ajax*/
        $l.common.ajax = {}
    
        /*动画*/
        $l.common.animation = {}
    
        win.$ = win.$l = $l;
    })(window)

链式访问

  • 什么是链式访问

    $('id').addClass('active').css({height:100}).attr('data-src','www.hellowrold.cc')  
    就是可以无限调用
    
  • 链式访问的实现

    在函数执行完毕以后返回对象本身,只有方法返回当前对象,才能访问对象的属性和方法 
    
    (function(win){
        var $$ = {
            //我是封装的框架
            on:function(type,fn){
                //do somethin
                this.addEventListener(type,fn);
                return this
            },
            of:function(type,fn){
                this.removeEventListener(type,fn)
                return this
            }
        }
    
        win.$ = $$
    })(window)

jQuery原理

  • 定义一个fn
  • 然后给fn的原型添加方法
  • return new fn()
 (function(win){
        //新建对象
        var fn = function(str){
            this.elem = [];
            this.selecto(str)
        }
        //给对象原型添加方法
        fn.prototype = {
            select:function(str){
                this.elem = document.querySelectorAll(str)
            }
        }

        //返回对象 实现调用
        function $(str){
            return new fn(str)
        }
 })(window)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值