`

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 面向对象的JavaScript进阶

    Javascript 面向对象的JavaScript进阶 Javascript技术

    JavaScript面向对象编程指南.pdf

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

    JavaScript面向对象编程指南

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

    面向对象JavaScript开发

    面向对象JavaScript开发,讲述了最新的Javascript面向对象特性,以及如何使用JavaScript进行面向对象程序开发。

    javascript面向对象编程

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

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

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

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

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

    JAVASCRIPT 面向对象编程精要

    从一个整体的角度来说明一下Javascript的面向对象的编程。

    Javascript面向对象编程.

    NULL 博文链接:https://goyourauntie.iteye.com/blog/1179204

    javascript贪吃蛇(面向对象)

    javascript贪吃蛇(面向对象)

    JavaScript 面向对象编程详细讲解文档

    虽然 JavaScript 是脚本语言, 但它所支持的面向对象编程也是非常强大的。虽然它没有类和实例, 但它有对象, 原型和隐式的继承。我们将会解释如何模拟继承及其超类与子类之间关系的形式。原型是理解继承概念的关键, ...

    JavaScript面向对象的支持

    JavaScript面向对象的支持 JavaScript面向对象

    javascript面向对象编程指南 2nd

    javascript面向对象编程指南 2nd英文版,英文名:Object-Oriented JavaScript。 What you will learn from this book The basics of object-oriented programming, and how to apply it in the JavaScript ...

Global site tag (gtag.js) - Google Analytics