主要也就是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();下篇再说继承关系。
分享到:
相关推荐
在这个图中,我们可以看到对象之间的继承关系,以及jQuery如何扩展和利用JavaScript的原型链机制。 首先,让我们讨论JavaScript的原型(Prototype)概念。在JavaScript中,每个对象都有一个内置的`__proto__`属性,...
这使得在JavaScript中实现复杂的对象模型和继承关系变得更加简单和直观。在实际开发中,`jQuery.extend()`不仅用于实现继承,还常用于配置选项、合并配置对象等场景,是jQuery库中的一个核心功能。
jQuery 对象与 DOM 对象之间的关系是这样的:jQuery 对象内部包含了 DOM 元素的引用,通常是通过数组形式(如 `this[0]`)。当你创建一个 jQuery 对象时,可以将一个选择器传递给 jQuery 函数,它会查找匹配的 DOM ...
例如,闭包可以用于创建私有变量,原型链则解释了如何通过对象之间的继承关系共享属性和方法,这对于理解JQuery的面向对象编程有很大帮助。 最后,`程序员常用javascript特效`可能是关于使用JQuery实现的各种常见...
通常,DOM对象需通过$()转换为jQuery对象,而jQuery对象转为DOM对象时,需提取特定索引的元素。 - 转换示例:`$(document.getElementById("msg"))`(DOM转jQuery) - 提取示例:`$("#msg")[0]`(jQuery转DOM) 3...
通过以上分析可以看出,JavaScript 中的继承机制非常灵活,可以通过原型链来轻松实现对象之间的继承关系。在实际开发中,这种机制被广泛应用于各种场景,特别是在使用jQuery等库时,经常会看到这样的继承模式。理解...
- 将jQuery对象转换为原生JS对象:使用`[index]`或`get(index)`方法。 - 将原生JS对象转换为jQuery对象:使用`$(原生JS对象)`。 - 将字符串转换为jQuery对象:使用`$(字符串)`。 2. **理解文档加载完成后的回调*...
但在jQuery中,尝试用选择器获取不存在的元素不会导致错误,而是返回一个空的jQuery对象。 总的来说,jQuery选择器的灵活性和易用性使得前端开发人员能够更高效地操作DOM,减少代码量,提高代码可读性和维护性。...
5. **原型和继承**:JS中的对象继承是通过原型链实现的,函数有prototype属性,可以创建子类。 6. **闭包**:函数可以访问并操作其词法作用域内的变量,即使该作用域已经结束。 **jQuery基础与应用** 1. **选择器**...
面向对象编程是一种编程范式,它是现代软件开发中的核心概念之一。...对于初学者或者希望巩固基础知识的开发者来说,这是一个很好的学习资源,能够帮助他们建立起完整的知识体系,并理解各种技术之间的关系和应用场景。
3. **Hibernate**:Hibernate是一个对象关系映射(ORM)框架,它允许开发者用Java对象来操作数据库。通过Hibernate,你可以避免编写大量的SQL代码,同时享受到对象编程的便利。在这个项目中,Hibernate可能是负责...
在介绍了上述多种选择器之后,文章还提到了在实际编码中可能遇到的问题,即同时使用原生JavaScript和jQuery时的注意事项,以及如何在jQuery对象和DOM对象之间进行转换。这些都是为了帮助开发者更好地理解和使用...
原型链是JavaScript中对象之间的引用关系,它使得一个对象可以访问其构造函数的原型对象的属性和方法。当我们尝试访问一个对象的属性时,如果该对象本身没有这个属性,JavaScript会向上查找该对象的原型,直到找到该...
面向对象编程的核心思想是将现实世界中的问题抽象为对象,通过对象之间的交互来解决问题。在C#中,面向对象主要体现在以下几个方面: 1. **类与对象**:类是创建对象的蓝图,它定义了对象的属性(数据成员)和行为...
对于数据库部分,面试题可能涉及对SQL语言的熟悉程度、数据库事务的ACID属性、关系型数据库设计中的范式、索引的作用以及具体数据库系统如Oracle的特定知识点等。而在前端技术中,可能还需要掌握JavaScript的DOM操作...
Hibernate是一个开放源码的对象关系映射(ORM)框架,它对JDBC进行了非常轻量级的对象封装,使得Java开发者能够以面向对象的思维方式来操作数据库。在本例中,Hibernate作为持久层框架,负责处理与数据库的交互,如...
Struts、Spring、Hibernate、Ajax、JQuery原理...Struts、Spring、Hibernate、Ajax、JQuery五个技术框架之间存在紧密的关系,互相补充和影响着对方。了解它们之间的关系和特点是关键成功地使用和整合这些技术的前提。
它支持类、接口、继承等面向对象特性,使得代码结构清晰,易于维护。此外,C#的强类型特性有助于减少编程错误,提高代码质量。 **JavaScript技术** JavaScript作为前端开发的主流语言,用于实现用户界面的动态交互...
总结来说,通过使用jQuery,我们可以构建一个模拟DOM事件机制的系统,使非DOM对象也能享受到事件驱动的便利。这种方法提高了代码的可维护性和复用性,使得组件设计更加符合实际需求。尽管最初实现可能看似简单,但它...
此方法可以用来创建具有继承关系的对象。 ```javascript var proto = { name: "原型对象" }; var obj = Object.create(proto); obj.__proto__ === proto; // true ``` 在本文中,我们讨论了jQuery源码中常见的...