- 浏览: 1171935 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
zhizhen23:
LZ 提供的链接地址失效了
重写的isPlainObject方法 -
LovingBaby:
<div class="quote_title ...
读jq之二(两种扩展) -
LovingBaby:
说的很清楚!jQuery作者为了实现简洁调用的苦心!高超的编程 ...
读jq之一(jq对象的组成) -
hard_ly:
...
将伪数组转换成数组 -
zlxzlxzlxzlxzlx:
这不能算是任意进制之间的转换,例如二十六进制、十二进制又该如何 ...
用递归实现十进制数转换N进制
上一篇分析了jquery对象的组成,这次来分析下jquery的extend方法。部分如下:
jQuery.extend = jQuery.fn.extend = function() { ... };
我们可以用$.extend去扩展自定义的对象,如:
var myself = {name:jack}; $.extend(myself, {setName:function)(n){this.name=n;} }); myself.setName("tom");
通过$.extend为对象myself添加了setName方法。但这里主要讨论$.extend如何构建jquery库的。不知注意到上面代码中jQuery.extend和jQuery.fn.extend是同一个函数。我们浏览下jquery库,发现有些方法是通过调用jQuery.extend扩展的,有的则是通过调用jQuery.fn.extend扩展的。下面分别讨论:
1,通过jQuery.extend扩展
我们知道jQuery.extend中的jQuery类型是function,即typeof jQuery值为字符串“function”。如果把jQuery当成一个类,jQuery.extend相当于为该类添加了静态方法extend。静态方法是不需要new一个实例再去调用的,通过“类名+方法名”直接调用。即jQuery.extend(...),jQuery又被赋值给$。因此我们更习惯$.extend(...)。
源码中直接调用jQuery.extend方法,只传一个参数。如下:
jQuery.extend({ noConflict: function( deep ) { window.$ = _$; if ( deep ) window.jQuery = _jQuery; return jQuery; }, ... });
我们知道extend中如果只传一个参数,那么将执行该句:
target = this;
即扩展自己,而这里的this则是function jQuery。也就是说给function jQuery添加了许多静态方法,这些方法都可以直接通过jQuery.xx(或$.xx)方式来调用,而不是先执行(调用)jQuery方法再去调用xx,如$("#id").xx。也许下面这个例子更容易理解:
function fun(){}//定义一个类(函数) //为该类(函数)添加一个静态方法extend fun.extend=function(obj){ for(var a in obj) this[a] = obj[a];//注意:这里的tihs即fun } //调用extend为该类添加了静态属性name,静态方法method1 fun.extend({name:"fun",method1:function(){}}); //输出name,prototype,extend,method1 console.dir(fun)
因此,jquery中的isFunction, isArray, trim等都是静态方法,只能通过$.isFunction, $.isArray, $.trim来调用。而不能通过$("...").isFuction, $("...").isArray, $("...").trim调用。
2,通过jQuery.fn.extend扩展
jQuery.fn等于jQuery.prototype,也就是说给function jQuery的原型(prototype)上挂了个extend方法。通过调用jQuery.fn.extend(object)来扩展时(注意只传一个参数object),extend函数中仍然会执行
target = this;
而这时的this则是jQuery.prototype(上面则是jQuery函数自身)。即给jQuery.prototype上添加了许多属性,方法。当jQuery函数执行时,如$()或jQuery(),更多时候是$()。该函数会new一个jQuery(见上一篇jquery对象的组成)。这时则把扩展的属性,方法都附加到new生成的对象上了。也许下面这个示例更容易理解:
function fun(){}//定义一个类(函数) //给该类原型上添加一个方法extned fun.prototype.extend = function(obj){ for(var a in obj) this[a] = obj[a];//注意:这里的this即是fun.prototype } //调用extend方法给fun.prototype上添加属性,方法 fun.prototype.extend({name:"fun2",method1:function(){}}) //输出name,extend,method1 console.dir(new fun())
因此扩展的属性或方法都添加到jquery对象上了。
如bind, one, unbind等可以通过$("...").bind, $("...").one, $("...").unbind方式调用。却不能通过 $.bind, $.one, $.unbind方式调用。
jquery库与prototype库一样都是通过extend方法扩展出整个库的。相对来说jqueyr的扩展方式更难理解一些。
总结如下:
a,jQuery.extend({...})是给function jQuery添加静态属性或方法
b,jQuery().extend({...})是给jquery对象添加属性或方法。
ps:这里的jQuery即为$。
- jq2.zip (614 Bytes)
- 下载次数: 96
评论
}
fun.prototype.extend = function (obj) {
for (var a in obj) {
this[a] = obj[a];//this === fun.prototype
}
console.log(this)
};
fun.prototype.extend({name: 'prototype-extend', method2: function () {
}});
console.log(new fun());
//这是我用NodeJS运行的结果:
{ extend: [Function],
name: 'prototype-extend',
method2: [Function] }
{}
//很纳闷,为什么原型的属性方法,对象没有继承过来,这个和V8引擎有关系?
哈哈,这是早期的回答,本来就是应该这样的,特来更正....
}
fun.prototype.extend = function (obj) {
for (var a in obj) {
this[a] = obj[a];//this === fun.prototype
}
console.log(this)
};
fun.prototype.extend({name: 'prototype-extend', method2: function () {
}});
console.log(new fun());
//这是我用NodeJS运行的结果:
{ extend: [Function],
name: 'prototype-extend',
method2: [Function] }
{}
//很纳闷,为什么原型的属性方法,对象没有继承过来,这个和V8引擎有关系?
平时只管用,从不管这些之前区别,达到目的就行了。
以后多来学习下
发表评论
-
如何定制你自己的jQuery
2015-01-12 08:38 2884jQuery随着版本的不断升级代码量也随之增加,从1.0. ... -
读jQuery之二十一(队列queue)
2013-11-21 14:13 2478queue模块在jQuery中分在Effects中,搜索整个 ... -
读jQuery之二十(Deferred对象)
2013-09-24 07:23 1209Deferred对象是由$.Deferred构造的,$.D ... -
读jQuery之十九(多用途回调函数列表对象)
2013-08-08 07:39 3168$.Callbacks是在版本1.7中 ... -
jQuery1.8的几个小变化
2013-05-18 07:57 1257一,.width() 和 .height()方法 1 ... -
读jQuery之十七(attribute/property/class)
2012-04-23 07:44 1662jQuery的属性模块提供了如下方法 attr/rem ... -
读jQuery之十六(事件代理)
2012-04-21 11:45 1851事件代理的实现原理很简单:利用浏览器中事件的冒泡(eve ... -
读jQuery之十五
2012-04-21 08:27 1271在之前的event-jq-0.2.js基础上继续提取jQuer ... -
读jQuery之十三(触发事件核心方法)
2012-04-20 07:40 1725触发事件,或称模拟用户动作。比如点击,我们可以用代码去模拟用户 ... -
读jQuery之十四
2012-04-20 22:12 1322最近看完了添加事件和删除事件的核心方法,忍不住想把jQu ... -
读jQuery之十八(元素位置)
2012-04-24 07:09 1743本篇所读源码版本为1.7.2 jQuer ... -
读jQuery之十二(删除事件核心方法)
2012-04-19 13:57 1554使用jQuery删除事件(或称解除事件绑定)有三个函数:unb ... -
读jQuery之十一(添加事件核心方法)
2012-04-19 07:07 2064上一篇提到jQuery中添加 ... -
读jQuery之十(事件模块概述)
2012-04-18 14:39 1834jQuery的事件模块是较 ... -
读jQuery之九(一些瑕疵)
2012-04-18 14:34 1320jQuery1.6.1 发布有一段时间了,发现一些冗余代 ... -
读jQuery之十八(元素位置)
2012-04-18 14:27 20本篇所读源码版本为1.7.2 jQuery中提供 ... -
读jq之八(原生事件对象的修复及扩充)
2010-12-04 09:13 2417由于各个浏览器中原生事件对象的 差异性 ,多数 JS库/框 ... -
读jq之七(判断点击了鼠标哪个键)
2010-12-03 18:31 2491jQuery丢弃了标准的 button 属性采用which ... -
jq中html()方法使用不当带来的陷阱
2010-05-29 10:54 5301.html方法当不传参数时用来获取元素的html内容,查看源码 ... -
jQuery1.4.2的一些瑕疵
2010-05-05 09:31 2276jQuery1.4.2 发布有一段时间了,发现一些多余的代 ...
相关推荐
一个基本的JQ Tab标签页由两部分组成:导航栏(tab headers)和内容区域(tab panes)。导航栏中的每个li元素对应一个内容区域,通过添加`class="active"`可以指定默认显示的标签页。 ```html ...
在控制方式上,JQ8900-16P具备多模态操作,包括两线串口模式、一线串口控制和按键模式,极大地扩展了其兼容性和灵活性。该模块可以使用U盘、TF卡和SPIFLASH作为存储介质,同时,它还支持USB声卡、读卡器和HID控制,...
- **样式设计**:进度条需要两种不同的样式以满足多样化的设计需求。 - **动态更新**:根据步骤的完成状态,进度条应实时更新显示当前步骤。 - **易用性**:代码应简洁易懂,便于其他开发者理解和使用。 ### 3. ...
**JQ 徘徊轮播LI**是一种基于jQuery(JQ)实现的用户界面(UI)组件,主要用于创建一种特殊的轮播效果。这种轮播方式被称为“徘徊轮播”,其特点是能够动态追加新的LI(列表项)数据,使得轮播内容在前端持续更新,...
`JQ` 和 `JS` 是两种常见的JavaScript库,它们在处理表单验证时各有优势。`JQ`(jQuery)简化了DOM操作,而`JS`(JavaScript)提供了更为底层的控制。本文将深入探讨如何使用jQuery(JQ)和纯JavaScript(JS)进行...
在IT行业中,JavaScript(简称JS)和jQuery(简称JQ)是前端开发中常用的两种库和语言,它们在创建交互式网页应用时发挥着至关重要的作用。本项目名为"JS+JQ随机抽奖代码",它提供了一种利用这两种技术实现随机抽奖...
在IT行业中,"JQ工具包+CSS3工具包"是一个组合,它包含了JavaScript库jQuery(简称JQ)以及与之相关的CSS3技术。这个资源集合可能是一个宝贵的开发辅助工具,提供了关于这两部分的详细文档和参考资料,帮助开发者更...
3. **生成CSV或HTML表格**:为了创建Excel文件,一种常见方法是先生成一个CSV(逗号分隔值)文件或者HTML表格,因为Excel可以很好地识别这两种格式。jQuery可以用于动态创建HTML元素,并将数据插入到表格中。 4. **...
API可以分为两种类型:公共API和私有API。开发者需遵循API文档来正确使用API,确保程序正常运行。 2. JDK(Java Development Kit): JDK是Java编程语言的开发工具包,由Oracle公司提供。它包含Java编译器、Java...
在IT行业中,jQuery(通常简称为JQ)是一种广泛使用的JavaScript库,它简化了DOM操作、事件处理、动画效果和Ajax交互。"基于JQ的多选加新闻循环"这个项目,显然涉及到两个主要的技术点:jQuery的选择器和事件处理...
在描述中提到的"重写的分页属性"可能是指通过这两种方式之一,对原有的分页属性进行了增强,例如: - **自定义页码样式**:可能增加了新的CSS类,允许用户自定义页码按钮的外观。 - **动态加载数据**:可能实现了...
在前端开发中,jQuery(通常简称为jq)是一种广泛使用的JavaScript库,它简化了DOM操作、事件处理、动画效果和Ajax交互。"jq 插件 实现拖拽"的主题涉及到了如何利用jQuery来创建一个允许用户通过拖动来移动元素的...
例如,一个简单的删除对话框可能包含一个`<div>`作为对话框容器,`<p>`标签用于显示消息,以及两个`<button>`元素分别代表“确定”和“取消”选项。CSS(层叠样式表)则用来设置对话框的样式,如位置、大小、颜色、...
基于jq的分页插件,简单易用。 $(function () { $("#page").initPage({ maxPage: 5, //最大显示数 pageCount: 7, //总页数 callBack: function (data) { ...有其他两种分页风格,查看test.html可知。
jQuery是一种广泛使用的JavaScript库,它简化了DOM操作、事件处理和动画效果,使得开发者能够用更少的代码完成复杂的交互功能。 在网页设计中,多图切换通常用于展示一组图片,例如产品展示、幻灯片或轮播图。这种...
手风琴效果是一种常见的交互设计,它允许用户逐个展开或收缩内容区域,以节省页面空间并提高用户体验。 首先,让我们了解jQuery的基本概念。jQuery是一个快速、简洁的JavaScript库,它简化了HTML文档遍历、事件处理...
本篇将详细讲解"jq分页控件"以及与之相关的jQuery选项卡功能。 首先,我们来看"jq分页控件"。这里的"jq"指的是jQuery,一个轻量级、高性能的JavaScript库,它简化了HTML文档遍历、事件处理、动画设计和Ajax交互。...
在IT行业中,jQuery(简称JQ)是一种广泛使用的JavaScript库,它简化了DOM操作、事件处理、动画制作等任务。本话题将详细讲解如何利用jQuery实现一个类似PowerPoint(PPT)的图片播放功能,包括页面翻动效果、图片...
jQuery组件(也称为jQuery插件)是扩展jQuery功能的一种方式,允许开发者根据需求创建自定义的工具和功能。下面我们将深入探讨如何编写jQuery组件。 ### 一、理解jQuery组件的基本结构 一个简单的jQuery插件通常由...
jQuery Router支持命令式和声明式两种导航方式。命令式导航通过调用`$.router.navigate()`方法手动改变URL;声明式导航则是在HTML中使用特殊链接或按钮,通过设置`data-url`属性来指定目标路由。 ### 7. 嵌套路由与...