JQuery小刨-2

看一下new一下jQuery.fn.init到底返回了什么。

1.如果参数selector是空或者无效的话,返回了一个this。
很显然这个this是在jQuery.fn.init之内的,所以返回的这个this就是方法jQuery.fn.init的一个实例,但是这个方法其实是没有任何可以向外输出的方法或者属性的,那返回的这个实例有什么用?
原来关键在于这一句

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

把jQuery.fn.init.prototype指向jQuery.fn这个object,那么jQuery.fn的所有方法和属性就都归jQuery.fn.init所有了,往下面看我们可以发现方法的扩充都是对jQuery.fn这个object来实行的。

2.如果select是个DOM元素的话,会有这样一个操作:

this.context = this[0] = selector;


关键是这个this[0],乍一看,还以为this怎么又成了数组了?其实这儿不是数组。这就涉及到javascript对象的本质了,javascript所有的对象包括数组都是个哈希表,属性名(包括方法名)就是key,属性值(包括方法实现)就是value。
使用this[0]并不代表这就是个数组,它也可以是个普通的object,比如:

var a = {length:3,0:0,1:1,2:2};
a.length = 2;
alert(a[0]);
alert(a[1]);
alert(a[2]);

如果a是数组的话,a[2]应该是没有值的,但是上面有。
另外,使用

Object.prototype.toString.call(a)

也可以判读其不是个数组。

对于哈希表的值有两种存取方式,一种是

object.key

第二种是:

object[key]


如果key是数字,或者是javascript的关键字,保留字,或者有空格的话,只能用第二种方式。

从上面的分析可以看出,其实对this[0]的复制,只是对this这个object添加了一个key为0的属性,并赋予其值。
但是,由于其有length属性,以及数字属性,所以其也同样会表现出数组的特性,所以可以使用数组的方法调用,比如

var b = Array.prototype.slice.call(a,0);


题外话,使用firebug调试的时候发现,如果一个object里有length,splice两个属性,就会被firebug显示为数组的形式(比如[])。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REaDME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 、资源1项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值