jq的$封装实现和css()方法实现(全在代码里)

//传入window是为了:
        //1.减少对window的搜索过程
        //2.有利于代码压缩
        //传入undefined是为了防止在ie678中undefined可以被传入数值改变

        (function (window, undefined) {
            var jQuery = function (selector) {

                //此时jQuery是一个工厂函数,但是我们需要一个实例对象,因此我们可以在
                //jQuery的原型中添加一个init方法,使其作为构造函数
                //点语法,优先级顺序:  . 的优先级 > new > ()执行

                return new jQuery.fn.init(selector);

            }

            jQuery.fn = jQuery.prototype = {

                init: function (selector) {

                    var ele = document.querySelectorAll(selector);

                    //借用! apply借用! 相当于this.push();apply的参数为数组,把数组的每一项拿出来一个个的放进去!

                    [].push.apply(this, ele);
                    //这一句相当于== Array.prototype.push.apply(this,ele);

                },

                //写css方法 写在jQuery的原型中

                css: function (name, value) {

                    if (arguments.length == 2) {  //如果实参为2个参数

                        for (var i = 0; i < this.length; i++) {

                            this[i].style[name] = value;

                        }
                    } else if(arguments.length == 1) { //如果实参为1个参数

                        if(typeof arguments[0] == 'string') { 

//如果为string类型,则应该是获取元素样式---->window.getComputedStyle(obj)[name] -->获取元素的样式属性
                            return window.getComputedStyle(this[0])[name];

                        } else { 传进来的参数为对象类型,应该先遍历对象

                            for(var key in name) {

                                for (var i = 0; i < this.length; i++) {

                                    this[i].style[key] = name[key];

                                }
                            }
                        }
                    }
                    return this;
                }
            }
            //让init的实例对象可以调用jQuery原型中的方法

            jQuery.fn.init.prototype = jQuery.fn;

            //暴露出去,并让$生效

            window.jQuery = window.$ = jQuery;

        })(window)

猜你喜欢

转载自blog.csdn.net/qq_31906983/article/details/84074656