-
链式调用 应改是在一个原型上写多个方法查看全部
-
new 操作符把圆形脸跟实例的this关联,这样可以通过实例可以传值到原型链查看全部
-
DOMContentLoaded 是在构造HTML DOM模型完毕,load 是在页面加载完毕查看全部
-
instanceof 判断左侧的对象是否是右侧类的实例;这样this就是指向aQuery这个实例对象查看全部
-
jquery咋学查看全部
-
Query.Callbacks还提供“once memory”等参数用来处理: ☑ once: 确保这个回调列表只执行( .fire() )一次(像一个递延 Deferred)。 ☑ memory: 保持以前的值,将添加到这个列表的后面的最新的值立即执行调用任何回调 (像一个递延 Deferred)。 ☑ unique: 确保一次只能添加一个回调(所以在列表中没有重复的回调)。 ☑ stopOnFalse: 当一个回调返回false 时中断调用。查看全部
-
、一个回调函数作为参数传递给另一个函数是,我们仅仅传递了函数定义。我们并没有在参数中执行函数。我们并不传递像我们平时执行函数一样带有一对执行小括号()的函数 2、回调函数并不会马上被执行,它会在包含它的函数内的某个特定时间点被“回调”查看全部
-
for in 语句对数组对象进行遍历潜在的bug在于:如果原生Array类被其他的js脚本库进行了原型扩展(比如多加一个toJSON方法即Array.prototype.toJSON=xxxx),那么用for in遍历扩展后的Array对象的逻辑将与遍历原生Array对象的逻辑发生差异查看全部
-
get与eq的区别<br> .eq() 减少匹配元素的集合,根据index索引值,精确指定索引对象。<br> .get() 通过检索匹配jQuery对象得到对应的DOM元素。<br> 同样是返回元素,那么eq与get有什么区别呢?<br> <br> eq返回的是一个jQuery对象,get返回的是一个DOM对象。举个例子:<br> <br> $( "li" ).get( 0 ).css("color", "red"); //错误<br> $( "li" ).eq( 0 ).css("color", "red"); //正确<br> get方法本质上是把jQuery对象转换成DOM对象,但是css属于jQuery构造器的,DOM是不存在这个方法的,如果需要用jQuery的方法,我们必须这样写:<br> <br> var li = $( "li" ).get( 0 );<br> $( li ).css("color", "red"); //用$包装<br> 取出DOM对象li,然后用$再次包装,使之转变成jQuery对象,才能调用css方法,这样要分2步写太麻烦了,所以jQuery给我们提供了一个便捷方法eq()。 Query的考虑很周到,通过eq方法只能产生一个新的对象,但是如果需要的是一个合集对象要怎么处理?因此jQuery便提供了一个slice方法: 语法: .slice( start [, end ] ) 作用: 根据指定的下标范围,过滤匹配的元素集合,并生成一个新的 jQuery 对象。 因为是数组对象,意味着我们可以用silce来直接取值了,所以针对合集对象我们可以这样写代码: var arr = [] arr.push( this.slice(start[,end]) ) this.pushStack(arr) 这个this指的是jQuery对象,因为jQuery对象是数组集合,所以我们可以通过原生的silce方法直接取到集合数,然后通过包装处理即可了。查看全部
-
通过调用的上下文,我们来确定这个方法是作为静态还是实例处理,在javascript的世界中一共有四种上下文调用方式:方法调用模式、函数调用模式、构造器调用模式、apply调用模式: ☑ jQuery.extend调用的时候上下文指向的是jQuery构造器 ☑ jQuery.fn.extend调用的时候上下文指向的是jQuery构造器的实例对象了 通过extend()函数可以方便快速的扩展功能,不会破坏jQuery的原型结构,jQuery.extend = jQuery.fn.extend = function(){...}; 这个是连等,也就是2个指向同一个函数,怎么会实现不同的功能呢?这就是this力量了! fn与jQuery其实是2个不同的对象,在之前有讲解:jQuery.extend 调用的时候,this是指向jQuery对象的(jQuery是函数,也是对象!),所以这里扩展在jQuery上。而jQuery.fn.extend 调用的时候,this指向fn对象,jQuery.fn 和jQuery.prototype指向同一对象,扩展fn就是扩展jQuery.prototype原型对象。这里增加的是原型方法,也就是对象方法了。所以jQuery的API中提供了以上2个扩展函数。查看全部
-
jQuery的核心理念是Write less,Do more(写的更少,做的更多),那么链式方法的设计与这个核心理念不谋而合。那么从深层次考虑这种设计其实就是一种Internal DSL。 DSL是指Domain Specific Language,也就是用于描述和解决特定领域问题的语言。 jQuery的Internal DSL形式带来的好处——编写代码时,让代码更贴近作者的思维模式;阅读代码时,让读者更容易理解代码的含义;应用DSL可以有效的提高系统的可维护性(缩小了实现模型和领域模型的距离,提高了实现的可读性)和灵活性,并且提供开发的效率。 jQuery的这种管道风格的DSL链式代码,总的来说: ☑ 节约JS代码; ☑ 所返回的都是同一个对象,可以提高代码的效率。 通过简单扩展原型方法并通过return this的形式来实现跨浏览器的链式调用。利用JS下的简单工厂方法模式,来将所有对于同一个DOM对象的操作指定同一个实例。查看全部
-
Query通过new原型prototype上的init方法当作构造器,那么init的原型链方法就是实例的方法了,所以jQuery通过2个构造器划分2种不同的调用方式一种是静态,一种是原型。 方法是共享的,并且实例方法取于静态方法,2个构造器是完全隔离的 ,这个要如何处理? 看看jQuery给的方案: 画龙点睛的一处init.prototype = jQuery.fn,把jQuery.prototype原型的引用赋给jQuery.fn.init.prototype的原型,这样就把2个构造器的原型给关联起来了。查看全部
-
引入jQuery运行这个noConflict函数将变量$的控制权让给第一个实现它的那个库,确保jQuery不会与其他库的$对象发生冲突。 在运行这个函数后,就只能使用jQuery变量访问jQuery对象。例如,在要用到$("aaron")的地方,就必须换成jQuery("aaron"),因为$的控制权已经让出去了。 使用DEMO: jQuery.noConflict(); // 使用 jQuery jQuery("aaron").show(); // 使用其他库的 $() $("aaron").style.display = ‘block’; 这个函数必须在你导入jQuery文件之后,并且在导入另一个导致冲突的库之前使用。当然也应当在其他冲突的库被使用之前,除非jQuery是最后一个导入的。查看全部
-
DOM文档加载的步骤: 要想理解为什么ready先执行,load后执行就要先了解下DOM文档加载的步骤: (1) 解析HTML结构。 (2) 加载外部脚本和样式表文件。 (3) 解析并执行脚本代码。 (4) 构造HTML DOM模型。//ready (5) 加载图片等外部文件。 (6) 页面加载完毕。//load 故ready先执行load后执行查看全部
-
jQuery的入口都是统一的$, 通过传递参数的不同,实现了9种方法的重载: 1. jQuery([selector,[context]]) 2. jQuery(element) 3. jQuery(elementArray) 4. jQuery(object) 5. jQuery(jQuery object) 6. jQuery(html,[ownerDocument]) 7. jQuery(html,[attributes]) 8. jQuery() 9. jQuery(callback) jQuery的无new构建原理 函数aQuery()内部首先保证了必须是通过new操作符构建。这样就能保证当前构建的是一个带有this的实例对象,既然是对象我们可以把所有的属性与方法作为对象的key与value的方式给映射到this上,所以如上结构就可以模拟出jQuery的这样的操作了,即可通过索引取值,也可以链式方法取值,但是这样的结构是有很大的缺陷的,每次调用ajQuery方法等于是创建了一个新的实例,那么类似get方法就要在每一个实例上重新创建一遍,性能就大打折扣,所以jQuery在结构上的优化不仅仅只是我们看到的,除了实现类数组结构、方法的原型共享,而且还实现方法的静态与实例的共存,这是我们之后将会重点分析的。查看全部
举报
0/150
提交
取消