在学习JavaScript面向对象的编程之前,需要知道,并了解面向对象的一些基本的常识。初学者中大多数都以为面向对象中,面向对象的编程是很重要和占据很大一部分精力。笔者在之前也是认为OOP是面向对象的主要部分,那么和我持有一样想法的,下面先要纠正这一想法,真正了解面向对象。

一、初识面向对象

面向对象分为三部分,包括面向对象分析(OOA)、面向对象设计(OOD)、面向对象的程序设计(OOP)。

1.1 OO编程(Object Oriented Analysis)

  典型的OO编程过程,应先整理需求,根据需求进行OOA,将真实世界的客观物件抽象成程序中的类或对象,这个时候使用的是UML语言,UML建模,OOA的输出结果是一个个类或对象的模型图。

接下的OOD,目的是处理类之间的耦合关系,设计类或对象的接口,此时会用到各种设计模式(23种设计模式),如观察者模式,责任链模式等等(之后会写一些JavaScript常用的设计模式)。 OOA和OOD是个反复迭代的过程,它们本身没有很清晰的边界,但是相互影响、制约。 OOA和OOD结束之后才进入OOP阶段,进入实际的编码阶段。 OOA和OOD是面向对象编程的思想和具体语言无关,而OOP是面向对象的编程工具,和选用的语言相关。

OOA和OOD因为具体要求与语言无关,所以能跨语言重用。而OOP作为二者的底层,不同的语言语法不同,所以OOP不同。

  通过简单的了解,我们所要学习的OOP编程只是面向对象里最简单的代码部分,下面我把我学习的面向对象的一些知识总结一下,理解不深,如有错误,还请订正

二、JavaScript的面向对象编程——类

(1)类的定义

在JavaScript中我们利用functions来定义一个类

  1. function Shape(){
  2. var x = 1;
  3. var y = 2
  4. }

这是一个简单的类,在类的内部只有var定义的私有变量,我们通过new关键字可以实例化一个对象 var aShape = new Shape(); ,这样我们就实例化出了一个对象实例,aShape。但是类中定义的是私有变量,我们通过 aShape.x 和 aShape.y 访问,发现程序弹出undefined。

下面我们重新定义一个类并测试

  1. function Shape2(){
  2. this.x = 1;
  3. this.y = 2;
  4. }
  5. var bShape = new Shape2(); //初始化一个实例对象
  6. alert(bShape.x);
  7. alert(bShape.y); //分别弹出1和2

我们在类中用this.属性名的方式定义公有变量,并且能访问成功。var除了定义私有变量,还能定义私有函数(private函数)

  1. function Shape3(){
  2. var draw = function(){
  3. //私有函数
  4. }
  5. this.draw2 = function(){
  6. //外界可以看到的共有函数
  7. }
  8. }

和访问变量类似,先实例化 var c = new Shape3(); 然后再通过 c.draw2(); 访问。

(2)简单的OOP编程

JavaScript是一门解释型的语言,它并不是真正的面向对象的语言,很多面向对象的机制是需要靠模仿来实现的。

  1. //模仿OOP编程
  2. function Shape4(m,n){
  3. var x = 0;
  4. var y = 0;
  5. //创建一个内部的初始化函数,并执行
  6. var init = function(){
  7. x = m;
  8. y = n;
  9. }
  10. init();
  11. //写一个get方法,取出我们传入的x值
  12. this.getX = function(){
  13. return x;
  14. }
  15. }

简单的一个模仿OOP编程,我们通过 var obj = new Shape4(2,4); 实例化一个obj,并传入2,4两个参数,在通过 obj.getX(); 得到我们传入的x参数,得到2。

下面我们来模仿OOP编程的构造函数,需要注意的是JS中静态方法是作用到类上,而不是对象上的。

  1. function Person(){
  2. this.Name = "yanyan"
  3. };
  4. Person.age = 0;//静态变量
  5. //静态方法
  6. Person.showName = function(obj){
  7. alert(obj.Name)
  8. } Person.showName(new Person());

(3)Map

JavaScript中不存在Map类型(键值对的集合)的数据,下面我们简单的模仿出Map类型

  1. function jMap(){
  2. //私有变量
  3. var arr = { };
  4. //增加
  5. this.put = function(key,value){
  6. arr[key] = value;
  7. }
  8. //查询
  9. this.get = function(key){
  10. if(arr[key]){
  11. return arr[key]
  12. }else {
  13. return null;
  14. }
  15. }
  16. //删除
  17. this.remove = function(key){
  18. delete arr[key]
  19. }
  20. //遍历
  21. this.eachMap = function(fn){
  22. for (var key in arr){
  23. fn(key,arr[key])
  24. }
  25. }
  26. }
  27. var country = new jMap();
  28. country.put("01","value1");
  29. country.put("02","value2");
  30. country.put("03","value3");
  31. country.put("04","value4");
  32. alert(country.get("04"));//读取key为04的值
  33. country.remove("04");//删除刚才读到的值
  34. alert(country.get("04"));//此时弹窗为null
  35.  
  36. //遍历读取
  37. country.eachMap(function(key,value){
  38. document.write(key+"-->"+value+"<br />");
  39. })

通过 var country = new jMap(); 实例化出了一个jMap对象,并通过put方法添加了四个键值的集合,此时jMap()作为类,我们可以通过new方法实例化出Map类型的数据。

JavaScript的面向对象编程(OOP)(一)——类的更多相关文章

  1. 2016/1/17 笔记 1,面向对象编程OOP 2,类 全

    面向对象编程OOP 编程方式的发展 1,面向过程 重用性低 维护工作量大  2,面向对象 重用性高 维护容易 概念 1,对象 Object 一个具体的事物 是类的实例      2,类Class 同一 ...

  2. JS--我发现,原来你是这样的JS:面向对象编程OOP[3]--(JS继承)

    一.面向对象编程(继承) 这篇博客是面向对象编程的第三篇,JS继承.继承顾名思义,就是获取父辈的各种"财产"(属性和方法). 怎么实现继承? 我们的JavaScript比较特别了, ...

  3. [JAVA] 面向对象编程OOP Note

    面向对象编程OOP Note OOP五个基本特性1. 万物皆对象.2. 程序是对象的集合,它们通过发送消息来告知彼此所要做的.3. 每个对象都有自己的由其他对象所构成的存储.4. 每个对象都拥有其类型 ...

  4. 学习面向对象编程OOP 第一天

    面向对象编程 Object Oriented Programming 一.什么是面向对象编程OOP 1.计算机编程架构; 2.计算机程序是由一个能够起到子程序作用的单元或者对象组合而成.也就是说由多个 ...

  5. S.O.L.I.D 是面向对象设计(OOD)和面向对象编程(OOP)中的几个重要编码原则

    注:以下图片均来自<如何向妻子解释OOD>译文链接:http://www.cnblogs.com/niyw/archive/2011/01/25/1940603.html      < ...

  6. 【软件构造】第三章第四节 面向对象编程OOP

    第三章第四节 面向对象编程OOP 本节讲学习ADT的具体实现技术:OOP Outline OOP的基本概念 对象 类 接口 抽象类 OOP的不同特征 封装 继承与重写(override) 多态与重载( ...

  7. [.net 面向对象编程基础] (9) 类和类的实例

    [.net 面向对象编程基础] (9) 类和类的实例 类 ,顾名思义就是分类.类别的意思.我们要面向对象编程,就需要对不同的事物进行分类.类可以说是.net面向对象的核心. 类:就是具有相同的属性和功 ...

  8. [.net 面向对象编程基础] (10) 类的成员(字段、属性、方法)

    [.net 面向对象编程基础] (10) 类的成员(字段.属性.方法) 前面定义的Person的类,里面的成员包括:字段.属性.方法.事件等,此外,前面说的嵌套类也是类的成员. a.类的成员为分:静态 ...

  9. JavaScript--我发现,原来你是这样的JS:面向对象编程OOP[2]--(创建你的那个对象吧)

    一.介绍 我们继续面向对象吧,这次是面向对象编程的第二篇,主要是讲创建对象的模式,希望大家能从博客中学到东西. 时间过得很快,还是不断的学习吧,为了自己的目标. 二.创建对象 1.前面的创建对象方式 ...

随机推荐

  1. java 中MAP的按照进入顺序遍历与无序遍历

    public static void main(String[] args) { Map<String,String> map=new HashMap<String,String&g ...

  2. JS事件

    JS事件:  声明:为了事件对象event跨浏览器兼容: var oEvent==ev||event;      所以在下面用到 event 的地方都用 oEvent 代替  1)doucument的 ...

  3. ES数据-MySql处理Date类型的数据导入处理

    用ES的小伙伴们,相信大家都遇到过Mapping处理Date类型的数据头疼问题吧. 不用头疼了,我来给你提供一种解决方案: 1.Maping定义为: {  "mappings": ...

  4. easyui DataGrid 工具类之 TableUtil class

    import java.lang.reflect.InvocationTargetException;import java.util.ArrayList;import java.util.HashM ...

  5. PSR-1:基本的代码风格

    PHP标签 必须把PHP代码放在<?php ?>或<?= ?>标签中.不得使用其他PHP标签句法. 编码 所有PHP文件都必须使用UTF-8字符集编码,而且不能有字节顺序标记( ...

  6. JavaScript 的面向对象

    一.JS 模块包装格式都用过哪些,CommonJS.AMD.CMD.定义一个JS 模块代码,最精简的格式是怎样. js模块化开发的起源. CommonJs原来是叫ServerJs,从名字可以看出是专攻 ...

  7. LINUX安全加固规范

    1 概述 近几年来Internet变得更加不安全了.网络的通信量日益加大,越来越多的重要交易正在通过网络完成,与此同时数据被损坏.截取和修改的风险也在增加. 只要有值得偷窃的东西就会有想办法窃取它的人 ...

  8. set集合(set是一个无序且不重复的元素集合)

    功能: 一.可以去掉列表,元组中的重复项 二.可以求交集,合集,差集等 def add(self, *args, **kwargs): """ 添加 "&quo ...

  9. exel中合并一列相同的数据到一行

    Sub 按钮1_Click() Application.ScreenUpdating = False arr = Range("a1:c" & [a65536].End(x ...

  10. 谈谈Memcached与Redis

    1. Memcached简介 Memcached是以LiveJurnal旗下Danga Interactive公司的Bard Fitzpatric为首开发的高性能分布式内存缓存服务器.其本质上就是一个 ...