`
stationxp
  • 浏览: 17334 次
社区版块
存档分类
最新评论

Java程序员的JavaScript学习笔记(11——jQuery-在“对象”层面扩展)

 
阅读更多
计划按如下顺序完成这篇笔记:
1. 理念。
2. 属性复制和继承。
3. this/call/apply。
4. 闭包/getter/setter。
5. prototype。
6. 面向对象模拟。
7. jQuery基本机制。
8. jQuery选择器。
9. jQuery工具方法。
10. jQuery-在“类”层面扩展。
11. jQuery-在“对象”层面扩展。
12. jQuery-扩展选择器。
13. jQuery UI。
14. 扩展jQuery UI。
这是笔记的第11篇,我们将对$()返回的对象功能进行扩展,以丰富其属性和功能,满足我们的需要。
在第9篇(http://blog.csdn.net/stationxp/article/details/40480185)我们了解到jQuery.extend和jQuery.fn.extend其实定义相同。
调用者不同,才导致了两个函数功能的差别(详细机制请参见本笔记第3篇)。
上一篇我们研究了jQuery.extend,本篇重点研究jQuery.fn.extend。

/*
作者博客:http://blog.csdn.net/stationxp
作者微博:http://weibo.com/liuhailong2008
转载请取得作者同意
*/


1、jQuery.fn.extend扩展了谁?

jQuery.fn.extend({});
上面语句调用者是jQuery.fn,jQuery.fn是谁?
看下面的jQuery源码:
var
// Define a local copy of jQuery
// jQuery 即 jQuery()这个函数,即 $()这个函数
jQuery = function( selector, context ) {
	// The jQuery object is actually just the init constructor 'enhanced'
	// init的返回值,即jQuery的返回值
	// 第7篇中我们分析了这行代码,等同于:
	// var ret = {};
	// jQuery.fn.init.apply(ret,selector, context, rootjQuery);//以ret为上下文调用init方法
	// ret.prototype = jQuery.fn.init.prototype; //jQuery.fn.init.prototype随后会被赋值为 jQuery.fn,这句好关键
	// return ret;
	return new jQuery.fn.init( selector, context, rootjQuery );
},
// jQuery.fn 是对jQuery原型的引用,原型中定义了init函数
jQuery.fn = jQuery.prototype = {
	init: function( selector, context, rootjQuery ) {
		//...
		// init 函数返回的是 this[0]、this[1]方式返回的数组,是执行选择器的结果
		return jQuery.makeArray( selector, this );
	}
}
;
// Give the init function the jQuery prototype for later instantiation
// 将jQuery.fn设置为jQuery选择
jQuery.fn.init.prototype = jQuery.fn;

以上代码,简而言之,jQuery.fn是$()函数返回值的原型对象。

在笔记的第2篇我们学习过,给对象的原型增加属性或方法,对象也会自动获得这些方法。


2、试试看

2.1、扩展方法

<div id='x'>Bill</div>
<script>
jQuery.fn.extend({
	greeting:function(){
		console.log('Hi, buddy! I am hailong\'s friend ' + this.text());
	}
});
$('#x').greeting();// Hi, buddy! I am hailong's friend Bill
$.greeting();//error : no such method
</script>

2.2、可以扩展属性吗?

<div id='b'>Bill</div>
<div id='s'>Steven</div>
<script>
jQuery.fn.extend({
	lord : 'liuhailong ',
	name : 'jQuery Object'
});


console.log($('#b').lord); // output : liuhailong
console.log($('#b').name); // output : jQuery Object


var b = $('#b'),  s = $('#s');
b.name = 'Bill';
s.name = 'Steven';


console.log(b.name,s.name); // output : Bill Steven 
</script>

正如我们期待的:完美支持。

3、可以做什么?

有什么用?可以实现任何你想实现的功能,发挥你的想象力吧!
分享到:
评论

相关推荐

    Java Web程序员开发手册(全)

    CSS完全参考手册3.0 ApacheMenu_zh_CN DIV+CSS(WEB标准) hibernate学习笔记 java web 标签大全 JavaScript 中文版 JDK_API_1_6_zh_CN jquery 1.7 中文 api 修正版 Jsp_sevlet中文API jsdom Oracle九阴真经 Servlet ...

    58同城源码java-javascript-understanding-the-weird-parts:TonyAlicea的JavaScri

    58同城源码java JavaScript:理解奇怪的部分 这些是我关于深入学习 JavaScript 的精彩课程的笔记。 如果您想了解 JavaScript 引擎是如何在幕后工作的,我强烈建议您查看本课程,您可以在 中找到该课程。 生成的目录 ...

    java版商城源码下载-Study-Notes:学习笔记

    jQuery-: Ajax: Vue: 微信小程序: 动态网页: 编程强化 JVM优化: 数据结构算法: 软件项目管理 Maven: SVN: Git: Jenkins: 热门技术框架 SSM: Mybatis-Plus : Spring Data: Spring: 分布式架构 Dubbo、...

    程序员专用刷题-syllabus:纽约大学高级JavaScript课程的教学大纲

    程序员专用刷题 布局 永久链接 默认 / 高级 JavaScript 教学大纲 如果您是教师或对课程设计感兴趣,请参阅文档。 课程: 导师:艾丹费尔德曼, 需要帮忙? 它将消息摘要发送给不在房间里活动的人,所以即使周围没有...

    程序员专用刷题-syllabus:课程说明

    程序员专用刷题高级 JavaScript 教学大纲 如果您是教师或对课程设计感兴趣,请参阅文档。 课程: 导师:艾丹费尔德曼, 需要帮忙? 它将消息摘要发送给不在房间里活动的人,所以即使周围没有人也可以随意提问。 浏览...

    程序员专用刷题-syllabus:教学大纲

    程序员专用刷题전력 공학도를 위한 딥 러닝 - 教学大纲 课程: 导师:艾丹费尔德曼, 需要帮忙? 它将消息摘要发送给不在房间里活动的人,所以即使周围没有人也可以随意提问。 浏览并创建 办公时间(见) 获得一对一...

    vue-notes:Vue学习笔记!

    Vue 系列 学习笔记阅读目录Vue 双向绑定原理,浅析 MVVMVue 源码概要VueX 状态管理常用地址链接Vue 是一个开源框架,最新版本已经更新到了 3.0,当前系列基于 2.X(单独发文 3.0),是一个独立的 Javascript 框架,...

    程序员专用刷题-2019.1:2019.1

    程序员专用刷题 课程: 导师:艾丹费尔德曼, 需要帮忙? 它将消息摘要发送给不在房间里活动的人,所以即使周围没有人也可以随意提问。 浏览并创建 办公时间(见) 获得一对一帮助,或安排见面时间 课程说明 在这门...

    程序员专用刷题-silabus:计算机图形学大纲(IF184502)A级,ITS信息学,2018年

    程序员专用刷题 布局 永久链接 默认 / Silabus Grafika Komputer (kelas A) 如果您是教师或对课程设计感兴趣,请参阅文档。 课程: 导师:艾丹费尔德曼, 需要帮忙? 它将消息摘要发送给不在房间里活动的人,所以...

Global site tag (gtag.js) - Google Analytics