//传入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)
jq的$封装实现和css()方法实现(全在代码里)
猜你喜欢
转载自blog.csdn.net/qq_31906983/article/details/84074656
今日推荐
周排行