浏览 2221 次
锁定老帖子 主题:JQuery小刨-2
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-04-08
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显示为数组的形式(比如[])。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |