`

面向对象

阅读更多
在js中面向对象是终极武器。
在认识面向对象之前,首先要先对面向对象有一个了解。
面向对象在我看来就是创建各种类,然后给各种类添加属性和方法,然后利用各种类达到你的目的。但是在js中好像我们都没有见过类这个概念,但是对于对象是这么定义的:“无序属性的集合,其属性可以包含基本值,对象或者函数。”按照高程里面讲的:对象是一组没有特定顺序的值。对象的每一个属性或者方法都有一个名字。每一个名字都映射到一个值。也可想象成一个散列表,表中有名值对,其中的值是数据或者函数。(其实在添加方法的时候,就是给一个对象的原型属性命名,然后令它为一个函数,或者是数据,函数用的比较广泛。)
梳理一下上面所说的:面向对象---建类---添加属性---添加方法。
那么,对象的创建,很简单。
var cat = new Object();
cat.name = 'mimi';
cat.colour = 'black';
cat.sound = 'miao' 
cat.say = function (){
console.log(this.sound)
}
alert(cat.say());

这是一个最简单的创建方式。通常最简单的只是开胃菜。下面就正式进入主题。
在这之前,需要先了解几个概念。
类:顾名思义,类就是平时所接触到的。比如人类;狗类等等。在w3s中是这么介绍的:每个对象都由类定义,可以把类看做对象的配方。类不仅要定义对象的接口(interface)(开发者访问的属性和方法),还要定义对象的内部工作(使属性和方法发挥作用的代码)。编译器和解释程序都根据类的说明构建对象。可以简单理解成为类--属性和方法。
实例:顾名思义,实际的例子。当然官方的说明是:程序使用类创建对象时,生成的对象叫作类的实例(instance)。对类生成的对象的个数的唯一限制来自于运行代码的机器的物理内存。每个实例的行为相同,但实例处理一组独立的数据。由类创建对象实例的过程叫做实例化(instantiation)。比如上面举的类cat   你可以从新为cat的属性命名,这样就得到一个新的cat。
cat.name = 'miao';
cat.colour = 'red';
cat.sound = 'wang' 

而这个新的cat就是所谓的实例。
到这里,我们应该知道,其实js中并没有类的概念。其实类是很容易理解的一个概念(对于别的程序猿而言),在js中,类就是定义对象。
面向对象的语言之中,有几个能力是需要具备的,只有这四个能力具备之后,面向对象才是真正的面向对象。
封装:把相关的信息存储在对象之中,(其实就是定义属性,方法);
聚集:把一个对象存储在另一个对象之中。
继承:一个类可以得到另外一个类的方法和属性
多态:不同类能定义多种方法和属性。
抽象:结合复杂的继承,方法,属性的对象能够模拟现实的模型。
对象的特征是属性,对象的能力是方法。在实际应用过程中,一般都是一个类只做自己份内的事情,尽量避免类和类之间的耦合,这样在编写大程序的时候,会减少bug的出现。


下面是关于定义类的部分,这一部分是关键点也是抽象点。从上面的内容中可以知道:在js中并没有类的定义,所以就需要我们模仿类来完成需求,js中的函数function就能办到这件事情。
利用函数来创建对象有很多种方法,从最初的工厂模式,到后来的原型方式都多多少少有一些
不合理之处。目前最常用的两种方式是:混合的构造函数/原型方式和动态原型方法。我用的比较多的是混合的构造函数/原型方式。
在构造函数的时候,我们需要先将构造的类名称首字母大写,用来和普通的元素进行区分,在类的属性里面需要用到this指针,代表指向本类,给类设置的属性一般用到的是经常变化的属性,比如人类的名字这一属性就是如此,每一个人都有着不同的名字,肤色,头发,等等。而我们设置的方法是一些经常不会变化的方法,比如说人类的自我介绍,通常是这么介绍:我的名字叫晨风,性别男,年龄24岁,爱好运动。如果这些东西要用代码呈现出来的话,就是下面这样的代码:
function Man (name,sex,age,hobby){
    this.name = name;
    this.sex = sex;
    this.age = age;
    this.hobby = hobby;
}
Man.prototype.show_myself = function (){
    var myself = '我的名字叫:'+this.name+',性别:'+this.sex+',年龄:'+this.age+',爱好:'+this.hobby+'.'
    return myself;
}
var man = new Man ('晨风','男',24,'运动');
var myself = man.show_myself();
console.log(myself)

在调用类的时候或者说创建实例(代码的倒数第三行就是创建实例。)的时候需要用到new这个东西。
这种构造对象的方法叫做混合的构造函数/原型方式。
另外在写一个例子:
1.混合的构造函数/原型方式
function Cat (colors,sounds,names){ 
     this.color = colors;
     this.sound = sounds;
     this.name = names;
}
Cat.prototype.show_yourself(){
console.log('我是一直小猫咪,我的名字叫'+this.name+'我的颜色是'+this.color+'我平时的声音是'+this.sound)
}
var cat = new Cat('黄','miao','咪咪');
var yourself = cat.show_yourself();

这就是混合的构造函数/原型方式,很接近于创建一般对象,非函数属性在构造函数之中创建,而原型方式定义函数属性(也叫做方法)。这么做的优点是:只需要创建一次就可以重复调用。不浪费内存。
2.动态原型方法
动态原型方法在java之中用的多,可以说js是模仿java而来的动态原型方法,因为java之中有class。
class Cat {
  public colors = '黄';
  public sounds = 'miao';
  public names = '咪咪';
public Cat(colors,sounds,names){
      this.color = colors;
      this.sound = sounds;
      this.name = names;
    }
 public  show_yourself (){
    System.out.println('我是一直小猫咪,我的名字叫'+this.name+'我的颜色是'+this.color+'我平时的声音是'+this.sound);
} 
}


这就是java中class很好的打包了Cat类的所有属性和方法。所以看见这一段代码就能知道要干什么。类似于java的js的动态原型方法如下:

function Cat(colors,sounds,names){
   this.color = colors;
   this.sound = sounds;
   this.name = names;
   
   if (typeof Cat._initialized == 'undefined'){
       Cat.prototype.show_yourself = function (){
            console.log('我是一直小猫咪,我的名字叫'+this.name+'我的颜色是'+this.color+'我平时的声音是'+this.sound)
       };
       Cat._initialized = true;
   }
}


typeof Cat._initialized 是这里是最重要的一部分,如果未定义构造函数将用原型方法继续定义对象方法,然后设置Cat.initialized为true。如果这个值定义了,就不再创建该方法。这样定义的类更像别的语言中对于类的描述。封装性比较好。





分享到:
评论

相关推荐

    plc面向对象编程架构与实现

    面向对象编程是计算机语言的一种先进的编程模式,在工业控制系统的PLC程序中也可以采用这种设计思想,虽然我们无法实现面向对象的很多特点如“继承”,甚至于它根本就不具备面向对象编程语言的特点,但面向对象编程...

    面向对象葵花宝典-电子版

    面向对象是目前最流行的一种程序设计和实现思想,无论你是从事企业级开发、互联网应用开发,还是手 机软件开发,都会使用到面向对象的技术;主流的编程语言中,C++,Java,C#,PHP,Python等都是支持 面向对象的语言;...

    Python 3面向对象编程

    Python 是一种面向对象的解释型语言,面向对象是其非常重要的特性。《Python 3面向对象编程》通过Python 的数据结构、语法、设计模式,从简单到复杂,从初级到高级,一步步通过例子来展示了Python 中面向对象的概念...

    面向对象分析与设计

    《面向对象分析与设计(第3版)》是UML创始人Grady Booch的代表作之一,书中介绍的概念都基于牢固的理论基础。同时,《面向对象分析与设计(第3版)》又是一本注重实效的书,面向架构师和软件开发者等软件工程实践者的...

    面向对象分析与设计UML2.0(PDF)

    详细介绍了面向对象的分析与设计,全面探讨了面向对象概念、软件开发过程、UML和多层技术。本书使用最常见的技术和方法,通过一个贯穿全书的案例分析,对面向对象的软件开发过程和使用面向对象技术的编程过程进行了...

    java面向对象编程源码

    本书内容由浅入深,紧密结合实际,利用大量典型实例,详细讲解Java面向对象的编程思想、编程语法和设计模式,介绍常见Java类库的用法,总结优化 Java编程的各种宝贵经验,深入阐述Java虚拟机执行Java程序的原理。...

    面向对象软件工程

    《面向对象软件工程》 作者:Stephen.R.Schach 学校:(美)范德比尔特大学 书名原名:Objected-Oriented Software Engineering 目录: 第一部分 面向对象软件工程简介  第一章 面向对象软件工程的范畴  第二章 ...

    漫画面向对象编程 Java

    借助于漫画展示的形式,面向对象的简、由类创建一个对象的方法、类的编写与对象的创建、类的构造函数、类的方法、修饰符、Java中的封装/继承/多态等特征、Java中的线程、用Java创建一个小世界、多线程共享数据,以及...

    面向对象分析与设计1

    国外计算机科学经典教材-面向对象分析与设计(UML 2.0版) 简介:本书详细介绍了面向对象的分析与设计,全面探讨了面向对象概念、软件开发过程、UML和多层技术。 本书使用最常见的技术和方法,通过一个贯穿全书的...

    面向对象 面向对象 面向对象

    面向对象 面向对象 面向对象面向对象 面向对象 面向对象面向对象 面向对象 面向对象面向对象 面向对象 面向对象面向对象 面向对象 面向对象

    习题解答-Java面向对象程序设计-邢国波-清华大学出版社.pdf

    习题解答-Java面向对象程序设计-邢国波-清华大学出版社.pdf习题解答-Java面向对象程序设计-邢国波-清华大学出版社.pdf习题解答-Java面向对象程序设计-邢国波-清华大学出版社.pdf习题解答-Java面向对象程序设计-邢...

    上海交大Java面向对象程序设计视频教程(全31集)

    资源名称:上海交大Java面向对象程序设计视频教程(全31集)资源目录:【】[上海交大][面向对象技术java]上(01-05集)【】[上海交大][面向对象技术java]上(06-10集)【】[上海交大][面向对象技术java]下(21-25集)【】...

    软工大作业面向对象分析与设计.doc

    面向对象分析与设计 1.实验目的 根据教师给定的题目或自选题目,利用有关的工具软件和面向对象的分析方法,进行信息系统的分析、设计和建模。 2.实验内容 利用UML和有关的工具软件,进行面向对象的系统建模,包括:...

    面向对象开发实践之路:DELPHI版(带完整书签)

    borland资深专家李维的经典作品,全面介绍了利用主流开发方法学和技术技巧进行面向对象开发的原则与实践,全面展现了作者深厚技术实践经验的精髓。  本书主要介绍了利用主流开发方法学和技术技巧进行面向对象开发...

    《C#面向对象程序设计》源代码(CS)

    本书以面向对象的软件工程思想为主线,细致深入地讲解了C#语言面向对象程序设计的方法和技巧,内容涵盖面向对象的基本概念、基于接口的设计、泛型程序设计方法、Windows和Web应用开发,以及数据库访问技术。...

    Python入门教程完整版(懂中文就能学会)资料面向对象讲义1.pdf

    面向对象 面向对象(OOP)基本概念 基本概念 面向对象编程 面向对象编程 —— Object Oriented Programming 简写 OOP 目标 目标 了解 面向对象 面向对象 基本概念 01. 面向对象基本概念 面向对象基本概念 我们之前学习...

    软件工程 期末大作业参考 【餐厅点餐系统 】面向对象模型(需求分析+面向对象设计书+可行性分析+测试文档+java界面)

    本文主要为计算机类专业课“软件工程”结课大作业参考资料,主要围绕餐厅的自助点餐系统进行一系列的研究,采用面向对象模型进行开发,完整资源包括需求分析、面向对象设计书、可行性分析、测试文档和使用java初步...

    易语言面向对象编程 面向对象学习

    易语言面向对象学习 1 一.枯燥的理论 2 1.对象和类 2 2.类的“成员”与“方法” 2 3.实例化 2 4.继承 3 二.牛刀小试 3 1.定义一个类,生成实例对象 3 2.“_初始化” 与 “_销毁” 5 三.一个更丰富的“员工...

    写给大家看的面向对象编程书(第3版).pdf

    《写给大家看的面向对象编程书(第3版)》是一部独具特色的面向对象技术著作。书中结合代码示例生动透彻地讲述了面向对象思想的精髓,让读者真正学会以对象方式进行思考。此外,《写给大家看的面向对象编程书(第3版)》...

    《Java面向对象编程》电子书+实例源代码+课后题答案.part10

    后续分卷改名为《Java面向对象编程相关资源》大家下载后要记得把压缩包改回原来的名字以便解压(如:Java面向对象编程相关资源.part11.rar--->Java面向对象编程书+实例源代码+课后题答案.part11.rar)。

Global site tag (gtag.js) - Google Analytics