jQuery源码部分总结
来源:互联网 发布:淘宝店铺视觉设计 编辑:程序博客网 时间:2024/05/17 02:12
var $$ = ajQuery = function(selector) { return new ajQuery.fn.init(selector);}ajQuery.fn = ajQuery.prototype = { name: 'aaron', init: function(selector) { this.selector = selector; return this; }, constructor: ajQuery, extend: function() { var options, src, copy, target = arguments[0] || {}, i = 1, length = arguments.length; //只有一个参数,就是对jQuery自身的扩展处理 //extend,fn.extend if (i === length) { target = this; //调用的上下文对象jQuery/或者实例 i--; } for (; i < length; i++) { //从i开始取参数,不为空开始遍历 if ((options = arguments[i]) != null) { for (name in options) { copy = options[name]; //覆盖拷贝 target[name] = copy; } } } return target; }}ajQuery.fn.init.prototype = ajQuery.fn //ajQuery.extend = ajQuery.fn.extend = ajQuery.fn.extend({ setName: function(myName) { this.myName = myName return this; }, getName: function() { $("#aaron").html(this.myName) return this; }})$$().setName('慕课网-Aaron').getName();console.log($$().setName('慕课网-Aaron'));
实现的方法同下面类似
var $$ = ajQuery = function(selector) { return new ajQuery.fn.init(selector);}ajQuery.fn = ajQuery.prototype = { name: 'aaron', init: function(selector) { this.selector = selector; return this; }, constructor: ajQuery}ajQuery.fn.init.prototype = ajQuery.fnajQuery.extend = ajQuery.fn.extend = function() { var options, src, copy, target = arguments[0] || {}, i = 1, length = arguments.length; //只有一个参数,就是对jQuery自身的扩展处理 //extend,fn.extend if (i === length) { target = this; //调用的上下文对象jQuery/或者实例 i--; } for (; i < length; i++) { //从i开始取参数,不为空开始遍历 if ((options = arguments[i]) != null) { for (name in options) { copy = options[name]; //覆盖拷贝 target[name] = copy; } } } return target;}ajQuery.fn.extend({ setName: function(myName) { this.myName = myName return this; }, getName: function() { $("#aaron").html(this.myName) return this; }})$$().setName('慕课网-Aaron').getName();
因为extend的this指向ajQuery.prototype这个对象
init的this也指向ajQuery.prototype这个对象
所以extend扩展的方法相当于
ajQuery.fn = ajQuery.prototype = {...setName: function(myName) {},getName: function() {}...}
jQuery既是对象也是函数
jQuery.extend调用的时候上下文指向的是jQuery构造器jQuery.fn.extend调用的时候上下文指向的是jQuery构造器的实例对象了
$(“.aaron”).each() //作为实例方法存在 走的是ajQuery.fn.init.prototype
$.each() //作为静态方法存在 走的是ajQuery.prototype
具体可测试
console.log($().jquery); //实例化了的方法console.log($.prototype.jquery); //静态方法
因为ajQuery.fn.init.prototype = ajQuery.fn = ajQuery.prototype实例方法与静态方法共享同一套方法
jQuery的原型对象覆盖了init构造器的原型对象,因为是引用传递所以不需要担心这个循环引用的性能问题。
参考原文:
写的非常好的一篇教程
http://www.imooc.com/learn/222
https://github.com/JsAaron/jQuery
1 0
- jQuery源码部分总结
- jQuery的部分总结
- jQuery的部分总结
- jQuery部分总结
- jQuery源码总结
- jQuery源码分析中的选择器部分
- jquery demo 部分问题解决方案总结
- JQuery基础学习部分总结 上
- RocketMQ生产者消费者部分源码分析总结
- jQuery源码学习之二 (部分变量解释说明)
- jQuery源码阅读(七)--init()遗留部分buildFragment()函数
- Jquery源码中的小技巧总结
- [Android] 随时拍图像处理部分总结及源码分享
- [Android] 随时拍图像处理部分总结及源码分享
- 源码一:Android部分基础控件使用总结
- 45-总结-【cartographer源码分析】系列的第五部分【kalman_filter】
- 58-总结-【cartographer源码分析】系列的第六部分【 mapping 】
- 查看RocketMQ的broker启动部分源码分析总结
- 硬件相关基础知识3(DDR3基本知识)
- Gradle学习系列之十——自定义Plugin
- compose: 对 Observable 整体的变换
- 滤波器的设计(低通、带通、高通)的matalb代码
- Android ToolBar
- jQuery源码部分总结
- Java基础(一)--- JDBC连接数据库详解
- 基于JDK1.8,Android Proguard失败
- 风口的猪-中国牛市
- ASP.NET跨平台实践:无需安装Mono的Jexus“独立版”
- Java NIO系列教程(二) Channel
- 二维码zBar之乱码解决
- hdu 5199 Comparison of Android version
- AngularJS实现跨域请求