jQuery 对象构造问题

wcxuan0729 2014-08-04 10:18:47
(function (global, factory) {
factory(global);
}(typeof window !== "undefined" ? window : this, factory));

function factory(window) {
var arr = [];

var jQuery = function (selector, context) {
var a = jQuery;
return new jQuery.fn.init(selector, context);
};

jQuery.fn = jQuery.prototype = {
constructor: jQuery,
selector: "",
length: 0,
splice: arr.splice
};

var init = jQuery.fn.init = function (selector, context) {
console.log(this.toString());
//这里为什么构造出来this是一个数组???
};

init.prototype = jQuery.fn;
var rootjQuery= jQuery(window.document);
}
...全文
111 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wcxuan0729 2014-08-05
  • 打赏
  • 举报
回复
zhjdg: 谢谢 好像差不多理解了 默认转换为数组了
zhjdg 2014-08-05
  • 打赏
  • 举报
回复
function $(){
	
}
$.prototype.splice=[].splice;
//$.prototype.push = [].push;


var $a = new $();
$a.length = 3;
$a["1"]="aa";
$a["3"]= "cc";

var $b=4;
zhjdg 2014-08-05
  • 打赏
  • 举报
回复
试了试。
function $(){
	
}
$.prototype.splice=[].splice;
//$.prototype.push = [].push;

$.prototype.push1 = function(a){
	if(this.length==undefined){
		this.length = 0;
	}
	this[this.length++]=a;
	
}
var $a = new $();
$a.push1("dd");
$a.push1("cc");

var $b=4;
wcxuan0729 2014-08-05
  • 打赏
  • 举报
回复
zhjdg: 把代码放到html里面,测试了 和 属性 length: 0, splice: arr.splice 应该有一定的关系 但是不太明确到底如何构造出来的数组
zhjdg 2014-08-05
  • 打赏
  • 举报
回复
可惜是个马甲。 楼1说的应该是对的,可惜手边没有好工具就不试了。
wcxuan0729 2014-08-05
  • 打赏
  • 举报
回复
xuzuning 版主:
你调试看this 实际是
wcxuan0729 2014-08-05
  • 打赏
  • 举报
回复
如果对象有length: 0, splice: arr.splice 这2个属性,编译器就认为是一个数组的话 我把代码 var init = jQuery.fn.init = function (selector, context) { console.log(this.toString()); //这里为什么构造出来this是一个数组??? }; init.prototype = jQuery.fn; var rootjQuery= jQuery(window.document); 改成 jQuery.fn.init = function (selector, context) { console.log(this.toString()); }; var rootjQuery= jQuery(window.document); 构造出来的 就不是数组了
xuzuning 2014-08-05
  • 打赏
  • 举报
回复
显示 {} 怎么说是数组?
豪情 2014-08-05
  • 打赏
  • 举报
回复
只要有对象有length: 0, splice: arr.splice 这2个属性,那么编译器会认为这个对象是数组。
jquery技术内幕:深入解析jquery架构设计与实现原理》由阿里巴巴资深前端开发工程师撰写,从源代码角度全面而系统地解读了jquery的17个模块的架构设计理念和内部实现原理,旨在帮助读者参透jquery中的实现技巧和技术精髓,同时本书也对广大开发者如何通过阅读源代码来提升编码能力和软件架构能力提供了指导。   《jquery技术内幕:深入解析jquery架构设计与实现原理》首先通过“总体架构”梳理了各个模块的分类、功能和依赖关系,让大家对jquery的工作原理有大致的印象;进而通过“构造jquery对象”章节分析了构造函数jquery()的各种用法和内部构造过程;接着详细分析了底层支持模块的源码实现,包括:选择器sizzle、异步队列deferred、数据缓存data、队列queue、浏览器功能测试support;最后详细分析了功能模块的源码实现,包括:属性操作attributes、事件系统events、dom遍历traversing、dom操作manipulation、样式操作css、异步请求ajax、动画effects。   《jquery技术内幕:深入解析jquery架构设计与实现原理》在分析每个模块时均采用由浅入深的方式,先概述功能、用法、结构和实现原理,然后介绍关键步骤和分析源码实现。让读者不仅知其然,而且知其所以然。事实上,本书的根本价值在于传达一种通过阅读源码快速成长的方式。无论是前端新人,还是经验丰富的老手,只要是对javascript感兴趣的开发人员,都会从本书中受益。

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧