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

OOP与jQuery(四):函数作用域、方法连缀及jQuery.fn

 
阅读更多

 

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

 

 

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

在这篇文章中,我们会讨论函数作用域、jQuery连缀模式和jQuery.fn。

 

 

1. 函数作用域

 

     我们都看到了,jQuery对象被包装在了很多层函数中。为什么我们用函数来定义作用域呢?因为JavaScript不能用花括号      定义作用域。JavaScript变量只有全局作用域和函数作用域。

 

     举例来说吧,为了把下面这个jQuery变量变成私有变量,必须把它包装在一个函数中:

 

function a() {
       var jQuery = "hellow world";
}

console.log(jQuery);  // undefined

 

     JavaScript函数具有词法作用域。什么意思?就是说,函数的作用域是在定义的时候创建的,而不是在执行的时候创建          的。

 

var jQuery = "hi there";
var f= function() {
       console.log(jQuery);
       var jQuery = "hello world";
};
f();
// undefind

 

     所以,如果运行上面的代码,返回的值会是undefined,而不是"hi there"。就是说,在同一个变量作用域或者同一个函数      内,只要有使用var声明jQuery的语句,那就可以在函数中的任何位置访问它,包括在var语句之前。所以上面的等同于:

 

var jQuery = "hi there";

var f = function() {
        var jQuery;   // 等同于 var jQuery = undefined;
        console.log(jQuery);
        jQuery = "hello world";
};
f();
// undefined

 

     就是说,函数f有自己的作用域,它没有读var jQuery = "hi there"。但在函数f内部,确定定义了jQuery变量,只不过调用        console.log()时,jQuery还没有定义(值为undefined)。

 

2. jQuery连缀模式

 

    看看init方法,不知道你是否注意到了,这个方法返回this。

 

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

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

     在jQuery中,可以在一个方法调用后面连缀另一个方法调用。之所以能够如此,是因为每个方法都像这里一样返回this对      象。

     还是不清楚?我们来解释一下。首先,来看看对象中的this关键字有什么用。

 

var city = {
      name : "beijing",
      getName : function() {
            return this.name;
      }
}
console.log(city.getName());

 

     以下代码输出的城市名是beijing,说明this引用的是city对象。

     在进一步,如果我们返回的是整个对象呢?

 

var num = {
      value : 1,
      minus : function(n) {
           this.value -= n;
           return this;
      },
      plus : function(n) {
            this.value += n;
      },
      getVal : function() {
             console.log(this.value);
       }
};

num.minus(2).plus(5).getVal();

 

    这样,就可以把方法调用连缀起来了。

 

3. jQuery.fn

 

    在core.js中,我们可以看到这行代码:

 

jQuery.fn = jQuery.prototype = {

        // ......

}

 

    在我们开发jQuery插件时,经常要用到$.fn,也就是jQuery.fn。现在知道了吧,jQuery插件其实就是添加到                 jQuery.prototype的方法。正因为如此,插件里也不要忘了返回this噢。

 

(function($) {
      $.fn.fontcolor = function() {
            return this.each(function() {
                  $(this).css("color", "orange");
            });
      };
})(jQuery);
 

 

分享到:
评论

相关推荐

    冒号课堂:编程范式与OOP思想 PDF

    《冒号课堂:编程范式与OOP思想》是一本深入探讨编程理论和技术的书籍,主要聚焦于编程范式和面向对象编程(Object-Oriented Programming, OOP)的概念。编程范式是编写程序的不同方式,它定义了如何组织代码、处理...

    第四章示例代码__对象的作用域

    在编程领域,对象的作用域是理解面向对象编程(OOP)的关键概念之一。它涉及到一个变量或对象在程序中的可见性和生命周期,对于代码组织、内存管理和数据安全性具有重要意义。本章示例代码将深入探讨对象作用域的...

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

    2. **闭包和作用域**: 在jQuery面向对象编程中,理解闭包和作用域至关重要。闭包允许我们在函数内部访问外部变量,而不会被垃圾回收机制清理,这在创建私有变量和方法时非常有用。 3. **构造函数与实例**: 在...

    oop与javascript

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

    jquery_js_oop

    《jQuery JS OOP:深入理解JavaScript面向对象编程》 在JavaScript的世界里,面向对象编程(Object-Oriented Programming,简称OOP)是一种重要的编程范式,它允许我们以类和对象的方式来组织代码,提高代码的复用...

    Scala函数式编程

    函数式编程(FP)是一种软件开发风格,它注重不依赖于编程状态的... 3 在做习题的过程中,尤其是在做类型推导的过程中,对原来oop,命令式编程向函数式编程转变有很大作用;而且简洁的语法,确实让人有享受编程的感觉。

    jmyloader:一个 jquery 加载器

    o o o o 8 8b d8 8 8o8 8`b d'8 o o 8 .oPYo. .oPYo.... 8 8 8 8 `YooP8 8oooo `YooP' `YooP8 `YooP' `Yooo' 8:8 ..::::..:....8 ......:.....::.....::.....::.....:..::::oP ::::::::::ooP'.::::::::::

    【独家】【笔面试知识要点】16.OOP与OBP构造函数静态块1

    面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它将程序设计为由多个相互协作的对象组成,每个对象都有自己的属性(数据)和行为(方法)。OOP的主要特征包括封装、继承、多态和抽象。在OOP...

    《深入PHP与JQUERY开发》.(Jason Lengstorf).[PDF].&ckook.pdf )

    根据提供的标题和描述,《深入PHP与JQUERY开发》这本书由Jason Lengstorf撰写,主要聚焦于PHP和jQuery这两种在Web开发领域极为重要的技术。接下来,我们将深入探讨这两个主题的关键知识点,以便为读者提供全面而深入...

    oop测试题(含答案).pdf

    在本题中,我们可以看到变量 $a 的作用域是全局的,而不是函数内的局部变量。因此,输出结果是 hello。 知识点:变量的作用域、全局变量和局部变量 5. this 关键字的使用 在 OOP 中,this 关键字表示当前对象的...

    OOP(面向对象编程)四个基本原则

    在OOP中,有四个基本原则,它们是设计高质量、可维护软件的基石。这四个原则分别是:开放封闭原则(Open-Closed Principle,OCP)、依赖倒置原则(Dependency Inversion Principle,DIP)、接口分离原则(Interface ...

    jQuery库文件及说明

    为了解决这个问题,可以通过`jQuery.noConflict()`方法释放`$`符号,或者使用`jQuery(function($) {...})`的匿名函数包裹代码,确保在该作用域内使用jQuery的`$`符号。 总的来说,这个压缩包提供了两种常用的...

    基于OOP的PLC程序设计方法研究.pdf

    为了更深入了解基于面向对象编程(Object-Oriented Programming, OOP)的PLC(可编程逻辑控制器)程序设计方法,首先需要掌握OOP的基本概念以及PLC编程的基础知识。OOP是一种编程范式,其核心思想是使用“对象”来...

    C#OOP内部测试机试题2.rar

    《C# OOP内部测试机试题2》是一个针对北大青鸟C#面向对象编程(OOP)学习者的内部测试资源。这个压缩包包含了与C# OOP相关的练习题,旨在帮助学员深入理解和掌握面向对象编程的核心概念和技术。下面将详细阐述C# OOP...

    JavaScript OOP 课程库.zip

    JavaScript OOP 课程库JavaScript 面向对象编程Telerik Academy的JavaScript OOP课程库JavaScript OOP是关于构建低级用户界面的。本课程涵盖 DOM、jQuery、事件、使用 HTML5 Canvas 和模板的图形和动画等主题课程...

    HTML+Java+JavaOOP+JQuery+JSP+Hibernate+Spring+Struts+人事面试

    熟悉JQuery的基本选择器、DOM操作方法(如`.append()`、`.remove()`)以及动画效果(如`.fadeIn()`)是必备技能。 JSP(JavaServer Pages)是Java的动态网页技术,将Java代码嵌入到HTML中,用于服务器端的编程。面试...

    编程范式与OOP思想

    ### 编程范式与OOP思想 #### 一、编程范式的概念 编程范式是一种编程风格,它定义了一套编程的基本结构和常见的做法,是程序员用来组织代码的一种思维方式。不同的编程语言支持不同的编程范式,每种编程范式都有其...

    JavaOOP_第1章上机练习.zip

    在Java OOP中,有四个核心概念:封装、继承、多态和抽象。这些概念是理解Java OOP的基础: 1. 封装:封装是将数据和操作数据的方法绑定在一起,形成一个独立的对象。在Java中,我们通过类(Class)来实现封装,通过...

    matlab_oop.pdf

    在OOP中,对象是数据(属性)和作用于这些数据的操作(方法)的封装体。通过定义类来创建对象,类可以看作是对象的模板或蓝图。 在MATLAB中引入面向对象编程后,开发者可以通过自定义类来实现复杂的数据结构,并...

    书籍:C语言实现OOP

    《C语言实现OOP》是一本独特而富有挑战性的书籍,它揭示了如何在传统的、非面向对象的C语言中实现面向对象编程(OOP)的概念。面向对象编程是一种广泛应用于现代软件开发的方法,它强调数据和操作数据的函数封装在...

Global site tag (gtag.js) - Google Analytics