自己封装jquery相关笔记(二)

1.IE8及以下中的apply的问题
◆apply方法可以改变this指向,同时可以把数组或者伪数组平铺传入给函数
◆但是ie8,apply只能平铺真数组或者内置的伪数组arguments,如果是自定义的伪数组,那么就会直接报错。
★IE8中需要先把自定义的伪数组转换为真数组,才能借用apply【
var obj={0:'abc',1:'cba',length:2};
var o={};


//使用普通的方式来转换
var arr=[];
for(var i=0,i<obj.length;i++){
arr.push(obj[i]);
};
[].push.apply(o,arr);
console.log(o);//{0:'abc',1:'cba',length:2};


//使用简便的方式 使用slice截取返回一个新数组
console.log([].slice.call(obj));//['abc','cba']
[].push.apply(o,[].slice.call(obj));
console.log(o);//{0:'abc',1:'cba',length:2};



2.$(function(){})的原理
◆页面的代码都是从上往下进行解析的,js代码如果想在指定的某个时候执行,只有通过设置绑定事件的回调函数才能实现。
◆为了防止获取不到页面的元素,所以要把函数传入jQuery,然后在这个回调函数中编写代码,然而这个回调函数会在页面的Dom元素解析完毕之后执行。
★jQuery中$(function(){})绑定的事件是Dom元素解析完毕之后的事件,就是DOMContentLoaded事件
★html新增了一个DOMContentLoaded,兼容IE9,这个时间会在Dom解析完毕后触发,通常这个事件要比onload快很多,但是也有很少的例外,如果发生了例外,DOMContentLoaded事件和onload事件触发的间隔时间相差不会很大,所以可以认为DOMContentLoaded比onload要快,只监听DOMContentLoaded即可。


3.onreadystatechange事件
◆在IE8中,所有的元素都有一个onreadystatechange事件,可以利用它代替DOMContentLoaded事件,当元素对象的readyState==='complete'时就是等价于DOMContentLoaded。





4.jQ原型上的核心方法和属性:
◆jquery 获取版本号
◆selector 代表所有实例默认的选择器,也代表实例是一个jQuery类型的对象
◆length 代表所有实例默认的长度
◆toArray 把实例转换为数组返回
◆get 获取指定下标的元素,获取的是原生的dom元素,如果不传递下标,就相当于toArray
◆each 遍历实例,把遍历到的数据分别传给回调函数使用
◆map 遍历实例,把遍历到的数据分别传给回调函数使用,然后把回调的返回值收集起来组成一个数组返回
◆slice 截取实例的部分元素,构成一个新的jQuery实例对象(jQuery.fn.init实例对象)返回
◆first 获取实例中的第一个元素,是jQuery类型的实例对象
◆last 获取实例中的最后一个元素,是jQuery类型的实例对象
◆eq 获取指定下标的元素,获取的是jQuery类型的实例对象,不是原生dom,这是与get的区别。
◆push 给实例添加新元素
◆sort 对实例中的元素进行排序
◆splice 按照指定下标指定数量删除元素,也可以替换删除的元素


5.js的预解析,会将变量的定义提升到最前面,如果可以,你可以直接将变量的定义直接放在最前面。


6.jQuery的静态方法指的是直接在jQuery工厂函数上直接添加方法,只能够使用jQuery.方法来调用,jQuery的实例方法指的是在jQuery的prototype添加方法,只能够使用jQuery实例对象.方法来调用或者jQuery.prototype.方法来调用,切记,直接调用jQuery()和new jQuery()是一样的,因为jQuery是一个工厂函数,只会返回一个 new jQuery.fn.init()。


7.函数的name属性无法修改

猜你喜欢

转载自blog.csdn.net/jwllwj_2018/article/details/80621112