`
Teddy_MaLi
  • 浏览: 6707 次
  • 性别: Icon_minigender_1
  • 来自: 景德镇
最近访客 更多访客>>
社区版块
存档分类
最新评论

OOP与jQuery(三):原型

 
阅读更多

本系列文章由石川创作,李松峰翻译,W3ctech.com首发,图灵社区转载。

 

 

“OOP与jQuery”是“解码jQuery”系列中的一个子系列,主要讨论jQuery的内部构成及相关的OOP(Object Oriented Programming,面向对象编程)概念。

 

第一篇文章以jQuery代码为例解释了变量(数据)和函数的概念。第二篇文章通过jQuery介绍了对象。

 

在这篇文章中。我们来谈一谈原型(prototype)。因为JavaScript是基于原型的语言,所以原型是这门语言中中的一个非常重要的概念。那基于类的语言呢?这篇文章会不会比较它和基于原型的语言?不会,至少现在不会。我觉得要理解原型,不一定非要对类和原型进行比较。假如你想教人说日语,那不一定要让他先学会希腊语。当然,这个人掌握了日语之后,对他学希腊语肯定是有帮助的:)下面就来看一看什么是原型,以及jQuery怎么使用原型。

 

1. 每个函数都有一个原型,原型是对象

 

     可以在JavaScirpt控制台中测试core.js文件:

 

var jQuery = function(selector, context) {
      // .......
}

console.log(typeof jQuery.prototype);

// 返回对象

 

2.给原型添加方法和属性

 

     给函数添加方法和属性的一种常见方法是像下面这样:

 

jQuery.prototype.constructor = jQuery;
jQuery.prototype.init = function(selector, context, rootjQuery) {
       // .......
}

 

     jQuery的原型(大约在core.js的第78行)就保存在jQuery函数的prototype属性中,提取出来的话,就像下面这样(第78        行代码中实际上还有一个jQuery.fn,它只不过是jQuery.prototype的别名而已;为了简单起见,就把它先忽略吧):

 

jQuery.prototype = {
       constructor : jQuery,
       init : function(selector, context, rootjQuery) {
            // .......
       }
}

 

     对以上jQuery代码而言,它其实是用一个新对象完全重写和替换了最初的原型。那么,逐个给原型添加属性与完全重写原      型有什么区别吗?没有什么太大区别,这就像是一个意思的两种不同表达方式,比如:

 

     我可以说:我有一只绿色的猫,一只蓝色的猫和一只粉红色的猫。

     也可以说:我有三只猫,分别是绿色的、蓝色和粉红色的。

 

     实际上还有第三种为函数添加属性和方法的方式:

 

function jQuery() {
       this.constructor = jQuery;
       this.init = function(selector, context, rootjQuery) {
            // ........
       }
}

 

3. 使用原型的方法和属性

 

     要使用方法和属性,必须创建一个新对象。以下就是在jQuery中创建新对象的方式,大约是在第6行

 

new jQuery.fn.init(selector, context, rootjQuery);

 

     另外,大约在第303行,还有如下代码:

 

jQuery.fn.init.prototype = jQuery.fn;

 

     哎呀,jQuery函数、对象、jQuery.fn、原型、还有init之间是什么关系呢?

 

下一篇......

下一篇,我们将继续探索jQuery核心,介绍jQuery.fn、原型和init方法之间的关系。

var jQuery = function() {
      // jQuery对象实际上就是一个“增强版的”init构造函数
      return new jQuery.fn.init(selector, context, rootjQuery);
}

jQuery.fn = jQuery.prototype = {
        init : function(selector, context, rootjQuery) {
            // ......
        }
}

// 为init函数赋予jQuery原型,以方便后面实例化
jQuery.fn.init.prototype = jQuery.fn
 
分享到:
评论

相关推荐

    oop与javascript

    #### 二、jQuery与OOP jQuery是一个快速、简洁的JavaScript库,极大地简化了DOM操作、事件处理、动画效果以及AJAX交互等功能。从jQuery的实现中,我们可以看到很多面向对象的设计思想。 ##### 1. 源码结构分析 ...

    jquery_js_oop

    下面将详细讲解JavaScript的OOP基础知识以及如何与jQuery相结合。 1. **JavaScript中的对象和原型** JavaScript是一门基于原型的语言,它的对象可以直接创建,而无需预先定义类。对象可以通过字面量语法或构造...

    form_builder:jQuery OOP、jQuery UI、CKEditor、基于 Ajax 的表单构建应用程序

    在“form_builder”项目中,jQuery OOP可能指的是通过函数构造器和原型链来创建可复用的组件或模块,比如表单元素的创建和管理。这种做法有助于代码组织和维护,减少代码冗余,提高代码可读性和可扩展性。 【jQuery...

    JQuery高级编程之面向对象.rar

    4. **原型链和继承**: jQuery对象可以通过原型链实现继承,这样可以复用父类的方法和属性。使用`$.extend()`或`Object.create()`可以实现这一点,提高代码的复用性。 5. **封装**: 面向对象的核心思想之一就是封装...

    Jquery基于面向对象无缝滚动广告

    面向对象编程(Object-Oriented Programming, OOP)是一种编程范式,通过封装、继承和多态性来组织代码。在JavaScript中,我们可以使用构造函数和原型来实现面向对象。在创建滚动广告时,我们可以定义一个广告对象,...

    the_newsroom:基于 jQuery OOP、Ajax 和 YQL 的新闻应用

    jQuery OOP 涉及到构造函数、原型、实例化等概念,使得创建自定义插件和模块化代码变得更加容易。这有助于保持代码结构清晰,降低耦合度,提升整体项目的可扩展性。 【Ajax】 Ajax(Asynchronous JavaScript and ...

    Apress - Pro JavaScript Techniques -2007.pdf

    - **对象与原型链**:讲解了对象的创建方式、属性访问、原型链的工作原理等。 - **事件处理**:介绍了如何处理用户交互事件,如点击、键盘输入等。 ##### 2. 高级编程技术 - **模块化编程**:介绍了如何将代码组织...

    JavaScript学习经历

    - 使用 jQuery 框架简化 DOM 操作,如选择元素、修改内容等。 - 理解事件监听器的绑定和触发机制,以便更好地响应用户操作。 ##### 5. 接触并使用 AJAX - **技术概述**:AJAX(Asynchronous JavaScript and XML...

    OOChess:使用面向对象的Javascript和Jquery制作的国际象棋游戏

    JavaScript虽然是一种基于原型的语言,但同样支持类的概念,可以创建构造函数和实例,以及实现继承和多态等面向对象特性。在OOChess中,每个棋子可能都是一个对象,拥有其特定的位置、移动规则等属性,并且可以执行...

    javascript例子

    5. **chap11 - 面向对象编程(OOP)**:JavaScript支持基于原型的面向对象编程,包括构造函数、原型链、对象继承等概念,这是构建复杂应用程序的基础。 6. **chap12 - 异步编程**:JavaScript的非阻塞特性使其在...

    Headfirst随书源码集合(jsp,jq,java,js,ajax,软件开发)

    Java的基础包括类、对象、封装、继承、多态等OOP概念,以及异常处理、集合框架、IO流和多线程等高级特性。Java的强类型和垃圾回收机制使其具有高度的稳定性和可维护性。 4. **JavaScript**:JavaScript是Web开发中...

    JavaScript内核系列

    与传统的面向对象语言不同,JavaScript中的对象是基于原型的继承机制,而不是类。对象是通过构造函数或者字面量方式创建的,并且可以包含属性(数据)和方法(函数)。 3. 原型是JavaScript中实现继承的关键。每个...

    HTML+CSS3+JS+JQuery实现七夕言情动画、面向对象程序设计、Deferred对象解决异步编程回调嵌套问题

    在JavaScript中,可以通过构造函数和原型链实现OOP。在七夕动画项目中,可以创建一个表示动画对象的构造函数,包含动画的属性(如速度、方向)和方法(如启动、停止动画)。通过实例化这个构造函数,可以为不同的...

    jquery-energize

    通过使用原型支持 Javascript OOP 原则。 更重要的是为编写 UI 组件提供代码一致性、简单性和更快的执行。 jQuery Energize 提供可扩展、可重用、简单的 UI 组件,这些组件使用 DOM API 构建在 jQuery 库之上。 ...

    wp_app_theme:Thema para wordpress utilizando en sumayoríaJS OOP

    在JavaScript中,我们可以通过构造函数、原型和闭包等机制实现OOP。 【描述】"“#wp_app_theme”" "#wp_app_theme"这个项目旨在展示如何将现代前端开发技术与WordPress的后端功能相结合,构建出功能强大且高度...

    Beginning JavaScript, 4th Edition

    - **面向对象编程(OOP)**:封装、继承、多态性等概念。 - **原型链**:JavaScript中对象之间的继承关系。 ##### 6. **浏览器编程** - **DOM(Document Object Model)**:文档对象模型的基本概念。 - **事件处理*...

    面向对象,JQuery,javascript,java基础,mybatis的接口开发的思维导图

    JavaScript 是一种解释型的、基于原型的脚本语言,主要用于网页和网络应用开发。它在客户端运行,允许动态交互和实时更新。JavaScript 支持函数作为一等公民,这意味着函数可以赋值给变量、作为参数传递和作为返回值...

Global site tag (gtag.js) - Google Analytics