jQuery对象是怎么创建的

jQuery对象是怎么创建的,第1张

普通对象:var obj='123'

如果你说的是标签对象,如:var ele=$('<div id="tt">Test</div>')这就可以创建了,但要把对象append到html中才能显示,比如:$(document.body).append(ele)

jQuery对象是由其prototype的init构造器进行构造实例,与prototype无关,可以抽离出来。

// 最新版本2.1.4

// 73行定义了jQuery构造函数

// Define a local copy of jQuery

jQuery = function( selector, context ) {

// The jQuery object is actually just the init constructor 'enhanced'

// Need init if jQuery is called (just allow error to be thrown if not included)

// 76行 jQuery对象通过prototype下的init方法进行构造并返回实例

return new jQuery.fn.init( selector, context )

},

// 92行 代码告诉我们 jQuery.fn 和 jQuery.prototype 是指向同一对象,也就是说fn是prototype的简写

jQuery.fn = jQuery.prototype = {

// The current version of jQuery being used

jquery: version,

// 96行修正constructor属性指回jQuery。同时jQuery对象虽然是用jQuery.fn.init方法构造,但constructor依然修正指向了jQuery,非为jQuery.fn.init,看下方代码

constructor: jQuery,

// 2735行 定义了jQuery.fn.init构造函数

init = jQuery.fn.init = function( selector, context ) {

// 2835行 使得jQuery.fn.init构造函数的原型和jQuery原型同时指向了同一个对象

// Give the init function the jQuery prototype for later instantiation

init.prototype = jQuery.fn

// 9202行 而$仅仅只是jQuery对象的一个别名,跟无new构造无关

window.jQuery = window.$ = jQuery

大概的代码结构就是这样子。

jQuery仅仅为了实现无new构造,在其原型下创建了init方法(仅充当构造器)为其构造实例对象,init方法的原型和jQuery原型指向了同一个对象(当然就成了循环引用),为后续的实例方法和实例插件机制打下基础(如果不指向同一对象写实例插件将会出现$.fn.init.fn.xxxxx这一幕),并修正constructor的指向,使得看起来像是由jQuery构造器构造。

$只是jQuery对象的别名, $ === jQuery 是成立的,并且因为使用new *** 作符的时候 ( new jQuery() ) 和 jQuery() 的 reutrn 值会覆盖new *** 作符生成的实例,所以 jQuery() 和 new jQuery () 的结果也是一样的。

而题主示例是

1、 $是实现jQuery无new构造的方法

2、 $ !== jQuery

3、 jQuery() 和 new jQuery的结果是不同的

需要通过将Dom对象变为jQuery对象后,用他的css方法改变。

var $logo = $("#domID")

$logo.css({"z-index":"999"})

z-index属性用于设置对象相对于页面在三维空间上的高度,这个需要把页面想象成立体的就明白了


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11339457.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存