jQuery对象之间的继承关系
2008-08-26 09:06
239 查看
上一篇主要是讲了jQuery的选择器的写法优化,在文章的前边打下了伏笔,这篇我们就分析jQuery对象继承关系,主要也就是jQuery,jQuery.fn和jQuery.fn.init之间的关系。我先把大概的代码提炼到这里。
var jQuery = function( selector, context ) {
return new jQuery.prototype.init( selector, context );
};
//上边定义了jQuery类。
//下边的定义应该很简单,定义了一个属性fn,到现在为止jQuery有两个属性fn和js默认的prototype原型,但是这两个属性是指向同一个对象,也就是说修改任何一个,另一个都会变化。
jQuery.fn = jQuery.prototype={
init:function(selector, context ){
//...................
return jQuery().find(selectot);
}
}
//测试一下,看看有什么不同。
for(var i in jQuery) alert(i + ' '+jQuery[i] );//有两个属性fn和prototype
jQuery.fn.test='yyyy';//给fn增加一个子属性
for(var i in jQuery.fn) alert(i + ' '+jQuery.fn[i] );//fn有一个属性test和一个方法init
for(var i in jQuery.prototype) alert(i + ' '+jQuery.prototype[i] );//prototype和fn一样
现在的init就是fn和prototype的一个方法。想调用只能 jQuery.fn.init()或者是jQuery.prototype.init(),那怎么办呢?你看我们一般都是这样调用fn里面的函数,$().xxx(),那就要想办法在jQuery中返回fn或者是protoype对象,为了达到这个目的实际上return jQuery.prototype就可以实现,但是程序本身还需要执行init这个方法,那就是下边的代码起了作用,把fn在绑定到init的 prototype原型上,这时候就相当月申明了一个jQuery.fn.init类,而且原型指向fn对象,是不是就统一了?这句效果就相当于
jQuery.fn.init=function(selector, context){
//...................
return jQuery().find(selectot);
////其他的fn方法
}
jQuery.fn.init.prototype = jQuery.fn;
fn的init方法和大多数的方法又是返回jQuery数组对象,实现了连写,实际上这里 fn属性的定义完全可以去掉。jQuery.fn.init.prototype = jQuery.fn;可以改成jQuery.fn.init.prototype = jQuery.protoype;效果一样,以后的扩展函数可以写成jQuery.protoype.xxx=function(){}但是为了兼容版本就不得不这样写了。
现在是不是大概有点明白了?这个只是从对象引用的角度分析,因为这样分析更容易接受,所以上边讲的调用都是静态调用,jQuery.fn.init();在静态调用的时候prototype就可以理解成一个静态的属性,如果加了new就不一样了,那就是类之间的继承,先做这样的测试
var obj=new jQuery();obj.init();下篇再说继承关系。
var jQuery = function( selector, context ) {
return new jQuery.prototype.init( selector, context );
};
//上边定义了jQuery类。
//下边的定义应该很简单,定义了一个属性fn,到现在为止jQuery有两个属性fn和js默认的prototype原型,但是这两个属性是指向同一个对象,也就是说修改任何一个,另一个都会变化。
jQuery.fn = jQuery.prototype={
init:function(selector, context ){
//...................
return jQuery().find(selectot);
}
}
//测试一下,看看有什么不同。
for(var i in jQuery) alert(i + ' '+jQuery[i] );//有两个属性fn和prototype
jQuery.fn.test='yyyy';//给fn增加一个子属性
for(var i in jQuery.fn) alert(i + ' '+jQuery.fn[i] );//fn有一个属性test和一个方法init
for(var i in jQuery.prototype) alert(i + ' '+jQuery.prototype[i] );//prototype和fn一样
现在的init就是fn和prototype的一个方法。想调用只能 jQuery.fn.init()或者是jQuery.prototype.init(),那怎么办呢?你看我们一般都是这样调用fn里面的函数,$().xxx(),那就要想办法在jQuery中返回fn或者是protoype对象,为了达到这个目的实际上return jQuery.prototype就可以实现,但是程序本身还需要执行init这个方法,那就是下边的代码起了作用,把fn在绑定到init的 prototype原型上,这时候就相当月申明了一个jQuery.fn.init类,而且原型指向fn对象,是不是就统一了?这句效果就相当于
jQuery.fn.init=function(selector, context){
//...................
return jQuery().find(selectot);
////其他的fn方法
}
jQuery.fn.init.prototype = jQuery.fn;
fn的init方法和大多数的方法又是返回jQuery数组对象,实现了连写,实际上这里 fn属性的定义完全可以去掉。jQuery.fn.init.prototype = jQuery.fn;可以改成jQuery.fn.init.prototype = jQuery.protoype;效果一样,以后的扩展函数可以写成jQuery.protoype.xxx=function(){}但是为了兼容版本就不得不这样写了。
现在是不是大概有点明白了?这个只是从对象引用的角度分析,因为这样分析更容易接受,所以上边讲的调用都是静态调用,jQuery.fn.init();在静态调用的时候prototype就可以理解成一个静态的属性,如果加了new就不一样了,那就是类之间的继承,先做这样的测试
var obj=new jQuery();obj.init();下篇再说继承关系。
相关文章推荐
- 【jquery】jQuery对象之间的继承关系(热荐)
- 当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行。
- 对象之间的继承之浅拷贝和深拷贝(jquery方法$.extend())
- 存在继承关系的Java类对象之间的类型转换
- 【面向对象程序设计常见面试题】多继承与虚函数之间的关系(已阅)
- 验证当多个类之间有继承关系时,创建子类对象会导致父类初始化块的执行。
- 本文是笔者根据数据库编程经验,利用C++语言的模板、继承、授权、多态等面向对象特性,借鉴命令模式,实现了对象在关系数据中的存储,降低应用系统与数据库之间的耦合,提高开发效率。
- 诠释了继承类之间构造器(有参、无参)、对象初始化块和静态初始化块之间的关系及调用顺序
- OC学习日记08-对象与对象之间的关系( 继承、 复合 、依赖)
- dom对象和jquery对象之间的关系。
- DOM对象与jquery对象之间的关系对比
- 面向对象之继承(类与类之间的关系)
- ActionScript对象与java对象之间转换关系对照表
- oracle中的数据库、用户、方案、表空间、表对象之间的关系 参考
- DOM与JavaScript、jQuery之间千丝万缕的关系
- 对象的继承关系在数据库中的实现方式和PowerDesigner设计
- hibernate类之间继承关系映射
- JAVA面向对象-----接口与类、接口之间的关系
- jQuery对象与DOM对象之间的转换
- 对象之间的关系