jQuery构造函数的init参数分析
在我的上一篇文章分析了jQuery构造器,jQuery对象有一个原型方法init是真正的构造函数,初始化实例可以调用由原型对象的原型对象初始化jquery jQuery正常方法使引用关系,就像jQuery的相同实例。让我们看看后面的初始化构造函数是写:初始化:功能(选择、语境、rootjquery){
…
}
您可以看到,该方法接受3个参数,前两个参数是通过jQuery方法传递的。
函数(选择器,上下文){
jQuery对象实际上只是 / init constructor'enhanced
返回新的jquery.fn.init(选择器,语境,rootjquery);
},
输入任何值都可以是选择器,但并不是所有的值都是有意义的,只有未定义的、DOM、jQuery、String元素、函数对象、普通javascript对象类型都是有效的,这个参数通常是完成但不完整是没有错的。
复制代码代码如下所示:
console.log($());
构造函数,init,函数,选择器: }
上下文不能作为执行上下文或执行范围引入,也不能作为一个jQuery对象(一个常见的Javascript对象)引入到DOM元素中。
参数rootjquery:jQuery对象中包含的文档对象,为document.getelementbyid()查找失败,选择器选择器表达式,没有上下文或选择器函数指定,实际上是$(document)。
根据参数的不同分为12种情况
1.selector可以转换为false
$( ),$(NULL),或($未定义)
如果(!选择器){
返回此;
}
源代码中的注释已经写得很清楚了。当这三种情况直接返回时,没有进行处理。
2。参数选择器是DOM元素。
例如:写$(文档)
/ /处理$(domelement)
如果(选择器。节点类型){
this.context =这{ 0 } =选择器;
this.length = 1;
返回此;
}
只要有DOM元素,就必须有节点类型。然后将节点转换为jQuery对象的第一个元素并分配给上下文上下文。长度属性是jQuery的原型属性,默认值是0。
jQuery对象的默认长度是0。
长度:0,
这里我们有一个将长度属性更改为1的元素。返回此操作使函数执行的结果仍然是jQuery对象,以便像$(文档)这样的链调用。每个()都可以实现。最后类似于{ 0:文档,上下文:文档,长度:1…基本对象,最后都将成为这个表单的对象,除了jQuery属性和方法之外,DOM节点是根据阿拉伯数字序列获得原型,所以我们可以用$(选择器)代替{ 0 },以$(选择器)的形式。获取(0)获得DOM对象:
console.log($('div '));
/ * { DIV,DIV,DIV,prevobject:jQuery。FN。jQuery。init { 1 },背景:文件选择器:div}
0:DIV
1:DIV
2:DIV
背景:文件
长度:3
prevobject:jQuery。FN。jQuery。init { 1 } __proto__:jQuery { 0 }
选择器:div
。
* /
3。参数是一个特殊字符串体。
因为体元素在文档对象中只有一个,所以它被单独列出。
体元素只存在/一旦优化找到它
如果(选择器上下文!文档(正文){
this.context =文件;
这{ 0 } = document.body;
this.selector =选择器;
this.length = 1;
返回此;
}
有3个条件必须同时满足。第二必须没有上下文。我不太懂。对体(文档)的看似正常的书写也被忽略了。
console.log($('body文件));
*
1
0:身体
背景:文件
长度:1
prevobject:jQuery。FN。jQuery。init { 1 }
选择器:
__proto__:jQuery { 0 }
* /
虽然结果是一样的,('body美元),它被视为两个案例。也许是因为身体只有一个上下文,只能是文件。这是没有必要添加它,否则它将决定是否上下文文件或没有。第三个条件是确保document.body必须存在,那么在什么情况下,第一个条件就不存在满足document.body首先,在加载HTML代码之前,加载js代码,这是初学者经常犯的错误,通常我们要编写:
$(函数(){…})
也许
$(文档)Ready(函数(…){ })
事实上,这两种方法是相同的方法,DOM在分析之后加载这一部分:
$('body)
然后选择,背景,和document.body在jQuery源码输出
console.log(选择器+背景+文档。体);
体元素只存在/一旦优化找到它
如果(选择器上下文!文档(正文){
this.context =文件;
这{ 0 } = document.body;
this.selector =选择器;
this.length = 1;
返回此;
}
虽然我们只写了一个,但实际上执行了四次。最后一次是我们打电话后的结果。最后的结果是bodyundefinednull。第一个是满意的,但最后一个是空的。回想起第一个JQuery框架结构,定义将要重建,所以将document.body被改写为空当我尝试修改代码时,它似乎并没有错,这就是防止HTML加载的条件。
第四个是字符串,而不是上面提到的字符串,而在下一个字符串中的情况更多。
以上是本文的全部内容,希望大家能喜欢。