`

JavaScript 也可以面向对象

阅读更多

由于js语言本身语法的灵活性,使得在js程序中出现了各种各样的代码风格,但也因为如此,导致了代码的可读性和可维护性大大降低,特别随着项目的不断更新,js代码的不断更新,到后期时甚至连自己的代码都不知然了,因此确定一种好的代码风格是很有必要的。


近些年随着ajax的兴起,js变得越来越受重视,js开始在web开发中充当非常重要的角色,因此也开始遇到了各种各样的问题,于是很多大牛就提出了js的面向对象编程方法。


JavaScript是一种基于原型(prototype)的面向对象的语言,它没有类的概念,所有的一切都派生自现有对象的一个副本。


一、下面看我画的总结图:

 


 

二、难点解析


1、this的概念

this管家你在引用的是包含它的函数作为某个对象的方法被调用时的那个对象。 下面看下面一个小例子:


 

Html代码 
  1. <script type="text/javascript">  
  2.   var sound="admin";  
  3.   function myFunction(){  
  4.     this.style.color='red';  
  5.     alert(sound);  
  6.   }  
  7. </script>  
  8.   
  9. <body>  
  10.   <a href="#" id="a">这是测试用的超链接</a>  
  11. <script type="text/javascript">  
  12.    document.getElementById("a").onclick=myFunction;  
  13. </script>  
  14. </doby>  

根据this的定义我们知道,上例中的this代表的是超链接。


2、构造函数的创建

Function是创建构造函数的起点。我们在之前学习C#的时候就已经学过,在创建函数实例的时候,我们也能创建构造函数。在js中也一样,例如编写代码:

var myObject=new myConstructor();

此时,myConstructor函数也可以作为构造函数。当对象被实例之后,构造函数会执行包含的代码。


3、闭包

闭包其实非常好理解,它的含义就类似于我们所学习的全局变量和局部变量。闭包是将函数内部和函数外部连接起来的一座桥梁。


下面看一个例子,详见注释:

 

Html代码 
  1. <script type="text/javascript" language="javascript">  
  2.     function override(){  
  3.       
  4.         //自定义alert函数  
  5.         var alert=function(message){  
  6.             window.alert('override'+message);  
  7.         };  
  8.         alert('alert');//调用自定义的alert函数。  
  9.         window.alert('window.alert');//调用window内置函数alert  
  10.     }  
  11.     override();//调用函数,执行函数内部的方法  
  12.     alert('alert from outside');//调用window函数的alert(这里由于闭包的原因,看不到用于自定义的alert函数)  
  13. </script>  


闭包的作用:一是可以读取函数内部的变量,另一个是让这些变量的值始终保持在内存中。怎样理解这句话呢?下面再来看一段代码:

 

Html代码 
  1. <script type="text/javascript">  
  2.     function funOne(){  
  3.         var n=999;  
  4.         nAdd=function(){  
  5.             n+=1;  
  6.         }  
  7.         function funTwo(){  
  8.             alert(n);  
  9.         }  
  10.         return funTwo;  
  11.     }  
  12.       
  13.     var result=funOne();  
  14.     result();//999  
  15.     nAdd();  
  16.     result(); //1000  
  17. </script>  

 

 

在这段代码中,result实际上就是闭包funTwo函数。它一共运行了两次,第一次的值是999,第二次的值是1000。这证明了funOne中的局部变量n一直保存在内存中,并没有在funOne调用后被自动清除。


为什么会这样呢?因为funOne是funTwo的父函数,而funTwo被赋给了一个全局变量,这导致funTwo始终在内存中,而funTwo的存在依赖于funOne,因此funOne也始终在内存中,不会在调用结束后,被垃圾回收机制——garbage collection回收。


“nAdd=function(){n+=1}”一行代码中,首先在nAdd前面没有使用var关键字,因此nAdd是一个全局变量,而不是局部变量。其次,nAdd的值是一个匿名函数——anonmous function,而这个匿名函数本身也是一个闭包,所以nAdd相当于一个setter,可以在函数外部对函数内部的局部变量进行操作。


三、总结

js面向对象部分的总结就到这里了。很多地方,本人理解的也不是很到位,希望您提出宝贵意见。本博客之前,推出过关于js面向对象的小例子,如果有兴趣的话,您可以自行查看。

  • 大小: 171.6 KB
4
0
分享到:
评论
2 楼 mixer_a 2012-06-19  
一切都是对象
1 楼 dyllove98 2012-06-19  
不错,面向对象就容易阅读和理解

相关推荐

    Javascript面向对象编程.

    在提供的资源中,《代码之美》PDF文件可能包含了关于编程实践和代码风格的指导,而《Javascript面向对象编程》PPT可能更具体地阐述了JavaScript OOP的细节和示例。学习这些材料将有助于深入理解JavaScript的面向对象...

    面向对象JavaScript精要(英文原版pdf)

    《面向对象JavaScript精要》是一本非常有价值的书籍,不仅适合初学者入门,也适合有一定经验的开发者进阶学习。通过学习本书,读者可以全面掌握面向对象编程的基本概念,并学会如何将这些概念应用到JavaScript中,...

    Javascript 面向对象的JavaScript进阶

    ### JavaScript面向对象进阶知识点详解 #### 8.1 面向对象编程的基本特性 在探讨面向对象的JavaScript之前,我们首先需要了解面向对象编程(Object-Oriented Programming, OOP)的基本特性:封装性、抽象性、继承...

    JavaScript面向对象编程指南.pdf

    JavaScript作为一门浏览器语言的核心思想;面向对象编程的基础知识及其在... 《JavaScript面向对象编程指南》着重介绍JavaScript在面向对象方面的特性,展示如何构建强健的、可维护的、功能强大的应用程序及程序库

    JavaScript面向对象编程指南

    《JavaScript面向对象编程指南》内容包括:JavaScript作为一门浏览器语言的核心思想;面向对象编程的基础知识及其在JavaScript中的运用;数据类型、操作符以及流程控制语句;函数、闭包、对象和原型等概念,以代码...

    面向对象JavaScript开发

    JavaScript,作为一种广泛应用于Web开发的动态脚本语言,最初被设计为简单的客户端脚本语言,但随着技术的发展,它已经发展出了丰富的面向对象编程(OOP)特性。面向对象JavaScript开发是现代Web开发中不可或缺的一...

    JAVASCRIPT 面向对象编程精要

    ### JavaScript面向对象编程精要 #### 一、引言 JavaScript是一种灵活且强大的脚本语言,它虽然起源于一种简单的浏览器脚本语言,但随着时间的发展,JavaScript已经成为了一种功能全面的编程语言,尤其是在Web开发...

    javascript 经典面向对象设计

    ### JavaScript经典面向对象设计 #### 标题与描述解析 标题“JavaScript经典面向对象设计”指出了本书的主要内容是关于如何使用面向对象编程(OOP)原则和技术来编写高质量、可扩展且可重用的JavaScript应用程序及...

    javascript面向对象编程

    面向对象编程的基础知识及其在JavaScript中的运用;数据类型、操作符以及流程控制语句;函数、闭包、对象和原型等概念,以代码重用为目的的继承模式;BOM、DOM、浏览器事件、AJAX和JSON;如何实现JavaScript中缺失的...

    Javascript面向对象编程

    ### JavaScript面向对象编程详解 #### 一、引言 JavaScript作为一种广泛使用的脚本语言,在Web开发领域占据着举足轻重的地位。尽管JavaScript本质上是一种基于原型的语言,但它也支持面向对象编程的一些特性,使得...

    javascript面向对象编程.pdf

    总而言之,学习现代JavaScript面向对象编程,有助于开发者在认识这门语言演化的基础上,运用面向对象的设计和编程模式来构建更加健壮和可维护的JavaScript应用程序。同时,测试和调试是保证代码质量不可或缺的环节,...

    JavaScript程序设计课件:面向对象概述.pptx

    面向过程与面向对象 6.1.1 面向过程与面向对象 1、概念 面向过程(Procedure Oriented)也可称之为“面向记录”,是一种以过程为中心的编程思想。它注重的是具体的步骤,只有按照步骤一步一步执行,才能够完成某件...

    JavaScript学习深入—面向对象编程

    ### JavaScript学习深入—面向对象编程 #### 一、JavaScript中的类型概述 JavaScript作为一种动态的、弱类型的语言,其核心特点之一在于它灵活的对象模型。尽管JavaScript的基础架构支持面向对象编程(OOP),但在...

    JavaScript面向对象编程指南(第2版).rar

    JavaScript是一种广泛...通过深入学习这本《JavaScript面向对象编程指南(第2版)》,开发者不仅能掌握JavaScript的面向对象编程基础,还能了解到实际项目中如何有效地运用这些知识,提升编程技巧和解决问题的能力。

    面向对象javascript

    面向对象JavaScript教程 面向对象JavaScript是一种编程范式,它将JavaScript脚本编写转换为面向对象的思想。面向对象的JavaScript开发可以极大地提高开发效率和代码健壮性。 面向对象的JavaScript的特征包括: * ...

    JavaScript面向对象的支持

    尽管JavaScript的面向对象特性不同于其他语言,开发者依然可以使用如工厂模式、单例模式、观察者模式等常见的设计模式来组织代码。 了解JavaScript的这些面向对象特性对于编写高效、可维护的代码至关重要。同时,...

Global site tag (gtag.js) - Google Analytics