本系列文章由石川创作,李松峰翻译,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
分享到:
相关推荐
#### 二、jQuery与OOP jQuery是一个快速、简洁的JavaScript库,极大地简化了DOM操作、事件处理、动画效果以及AJAX交互等功能。从jQuery的实现中,我们可以看到很多面向对象的设计思想。 ##### 1. 源码结构分析 ...
下面将详细讲解JavaScript的OOP基础知识以及如何与jQuery相结合。 1. **JavaScript中的对象和原型** JavaScript是一门基于原型的语言,它的对象可以直接创建,而无需预先定义类。对象可以通过字面量语法或构造...
在“form_builder”项目中,jQuery OOP可能指的是通过函数构造器和原型链来创建可复用的组件或模块,比如表单元素的创建和管理。这种做法有助于代码组织和维护,减少代码冗余,提高代码可读性和可扩展性。 【jQuery...
4. **原型链和继承**: jQuery对象可以通过原型链实现继承,这样可以复用父类的方法和属性。使用`$.extend()`或`Object.create()`可以实现这一点,提高代码的复用性。 5. **封装**: 面向对象的核心思想之一就是封装...
面向对象编程(Object-Oriented Programming, OOP)是一种编程范式,通过封装、继承和多态性来组织代码。在JavaScript中,我们可以使用构造函数和原型来实现面向对象。在创建滚动广告时,我们可以定义一个广告对象,...
jQuery OOP 涉及到构造函数、原型、实例化等概念,使得创建自定义插件和模块化代码变得更加容易。这有助于保持代码结构清晰,降低耦合度,提升整体项目的可扩展性。 【Ajax】 Ajax(Asynchronous JavaScript and ...
- **对象与原型链**:讲解了对象的创建方式、属性访问、原型链的工作原理等。 - **事件处理**:介绍了如何处理用户交互事件,如点击、键盘输入等。 ##### 2. 高级编程技术 - **模块化编程**:介绍了如何将代码组织...
- 使用 jQuery 框架简化 DOM 操作,如选择元素、修改内容等。 - 理解事件监听器的绑定和触发机制,以便更好地响应用户操作。 ##### 5. 接触并使用 AJAX - **技术概述**:AJAX(Asynchronous JavaScript and XML...
JavaScript虽然是一种基于原型的语言,但同样支持类的概念,可以创建构造函数和实例,以及实现继承和多态等面向对象特性。在OOChess中,每个棋子可能都是一个对象,拥有其特定的位置、移动规则等属性,并且可以执行...
5. **chap11 - 面向对象编程(OOP)**:JavaScript支持基于原型的面向对象编程,包括构造函数、原型链、对象继承等概念,这是构建复杂应用程序的基础。 6. **chap12 - 异步编程**:JavaScript的非阻塞特性使其在...
Java的基础包括类、对象、封装、继承、多态等OOP概念,以及异常处理、集合框架、IO流和多线程等高级特性。Java的强类型和垃圾回收机制使其具有高度的稳定性和可维护性。 4. **JavaScript**:JavaScript是Web开发中...
与传统的面向对象语言不同,JavaScript中的对象是基于原型的继承机制,而不是类。对象是通过构造函数或者字面量方式创建的,并且可以包含属性(数据)和方法(函数)。 3. 原型是JavaScript中实现继承的关键。每个...
在JavaScript中,可以通过构造函数和原型链实现OOP。在七夕动画项目中,可以创建一个表示动画对象的构造函数,包含动画的属性(如速度、方向)和方法(如启动、停止动画)。通过实例化这个构造函数,可以为不同的...
通过使用原型支持 Javascript OOP 原则。 更重要的是为编写 UI 组件提供代码一致性、简单性和更快的执行。 jQuery Energize 提供可扩展、可重用、简单的 UI 组件,这些组件使用 DOM API 构建在 jQuery 库之上。 ...
在JavaScript中,我们可以通过构造函数、原型和闭包等机制实现OOP。 【描述】"“#wp_app_theme”" "#wp_app_theme"这个项目旨在展示如何将现代前端开发技术与WordPress的后端功能相结合,构建出功能强大且高度...
- **面向对象编程(OOP)**:封装、继承、多态性等概念。 - **原型链**:JavaScript中对象之间的继承关系。 ##### 6. **浏览器编程** - **DOM(Document Object Model)**:文档对象模型的基本概念。 - **事件处理*...
JavaScript 是一种解释型的、基于原型的脚本语言,主要用于网页和网络应用开发。它在客户端运行,允许动态交互和实时更新。JavaScript 支持函数作为一等公民,这意味着函数可以赋值给变量、作为参数传递和作为返回值...