jQuery原理(原型上的属性、方法)
jQuery原型上的属性
1 | kjQuery.prototype = { |
关于三个方法(push,sort,splice)以push为例:
- 通过
[].push
找到数组的push方法 - 但是对象的push方法由对象调用,那么
this
就指向了对象(jQuery) - 所以也就相当于
[].push.apply(this)
将元素添加到对象身上
jQuery原型上的方法
toArray
把实例转换为数组返回
1 | toArray: function () { |
get
取指定下标的元素,获取的是原生DOM
1 | get: function (num) { |
eq
获取指定下标的元素,获取的是jQuery类型的实例对象
1 | eq: function (num) { |
first与last
first
:获取实例中的第一个元素,是jQuery类型的实例对象1
2
3first: function () {
return this.eq(0);
},last
:获取实例中的最后一个元素,是jQuery类型的实例对象1
2
3last: function () {
return this.eq(-1);
},
each
遍历实例,把遍历到的数据传给回调使用
jQuery存在两个each方法,一个类方法,一个对象方法。当实现类方法时,只需要让对象方法调用类方法即可实现。
类方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32kjQuery.extend({
each: function (obj, fn) {
// 1. 判断是否是数组
var res;
if (kjQuery.isArray(obj)) {
for (var i = 0; i < obj.length; i++) {
// res = fn(i, obj[i]);
// 将this修改为指向value
res = fn.call(obj[i], i, obj[i]);
if (res == true) {
continue;
} else if (res === false) {
break;
}
}
}
// 2. 判断是否是对象
else if (kjQuery.isObject(obj)) {
for (var key in obj) {
// res = fn(key, obj[key]);
// 将this修改为指向value
res = fn.call(obj[key], key, obj[key]);
if (res == true) {
continue;
} else if (res === false) {
break;
}
}
}
return obj;
},
});对象方法
1
2
3
4
5kjQuery.prototype = {
each: function (fn) {
return kjQuery.each(this, fn);
},
};
map
遍历实例,把遍历到的数据传给回调使用,然后把回调的返回值收集起来组成一个新的数组返回
map方法与each方法的区别
each静态方法默认的返回值就是, 遍历谁就返回谁; map静态方法默认的返回值是一个空数组
each静态方法不支持在回调函数中对遍历的数组进行处理;map静态方法可以在回调函数中通过return对遍历的数组进行处理, 然后生成一个新的数组返回
1 | kjQuery.extend({ |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 小康博客!
评论
TwikooWaline