之前一直都是用面向过程的方式编程,今天我们来看一下面向对象编程Javascript是一种基于对(object-based)的语言,在js中遇到的所有东西几乎都是对象,但是,js又不是一种真正的面向对象编程的语言,因为它的语法中没有class(类)。
下面我们一起来了解一下面向对象编程的基础知识:
一,生成对象的原始模式:
首先我们来选定一个对象人,假设他有名字和性别两个属性,用代码来表示为:
var person = { name: '', age: '' }
这就是一个原型对象,通过这个原型对象来生成两个实例对象。用代码来实现:
var person = {};// 创建一个空对象 person1.name = '小张';//按照原型对象的属性赋值 person2.age = 20; var cat2 = {}; cat2.name = "小李'"; cat2.age = 25;
给空对象赋值,生成两个实例,这是最简单的封装了,把两个属性封装在一个对象里面,这种方法虽然简单但是有很大的缺点,如果生成很多个实例的时候,一个一个写太麻烦,也无法看出实例与原型之间的联系,我们平时不采用这种方法。
二,对原始模式进行改进
所谓的改进就是通过函数解决代码繁琐重复的问题。
function person(name,age{ return { name:name, age:age } }
后面的name就是你要赋的值,然后通过调用函数来生成实例:
var person1 = person ('小张',20); var person2 = person ('小李',25);
这种方法同样存在问题,person1和person2之间没有任何内在的联系,不能反映出他们是同一个原型对象的实例。
三,构造函数模式
构造函数模式就是在其内部使用this变量,然后再用new运算符通过函数生成实例:
代码如下:
function person(name,age){ this.name=name; this.age=age; }
生成实例:
var cat1 = new person("小张",20) var cat2 = new person("小李",25); alert(cat1.name); // 小张 alert(cat1.color); // 小李
生成实例中,参数小张和小李分别赋值给this.name;参数20和25分别赋值给this.age
构造函数的方法同样存在一个问题,浪费内存,有些方法和属性是共有的我们可以不用每次都赋值,可以直接引用,下面的两个方法一个改进了这个问题,一个就解决了这个问题。
四:构造函数模式的问题
现在为person对象添加一个不变的属性eat,代码如下:
function Cat(name,color){ this.name = name; this.color = color; this.eat = function(){alert("吃饭");}; }
生成实例:
var cat1 = new Cat("小张",20); var cat2 = new Cat ("小李",25); cat1.eat(); // 吃饭
alert(cat1.eat == cat2.eat); //false因为两个实例的eat存在了不同的位置所以错
这个方法并没有测地解决这个问题,每次生成实例的时候eat里的内容都一样,这样也浪费内存,下面要介绍的这个问题就解决了这个问题,
五:prototype模式
js规定,每一个构造函数都有一个prototype属性,我们可以把那些不变的属性和方法直接定义在prototype对象上。
function person(name,age){ this.name = name; this.age = age; } Cat.prototype.eat = function(){alert("吃饭")};
然后生成实例person1和person2,这时:
alert(person1.eat == person2.eat); //true
因为两个实例的eat属性都是指向prototype对象,所以相等,可以与上个比较着理解.
以上就是面向对象的一些基础,要好好理解~
相关推荐
python强大的面向对象能力,让你更好的理解python核心语法
面向对象的关键是抽象 面向对象分析设计的成功实施要求更高,难度更大: 在理解对象基本理论和开发技术的前提下,加上丰富的程序开发实践,才行。 结构化与面向对象方法应该相辅相成,在合适的地方用合适的方法。
适合刚刚学习到面向对象三大特征的同学来巩固对知识的理解
C#面向对象基础教程 电子书 《C#面向对象基础教程》以C#语言面向对象的知识体系为主线,采用典型案例引导、任务驱动的模式进行编写。在内容的安排上遵循“实用、够用、应用”的原则,从基本知识、应用技能出发,介绍...
这是本人在实践和阅读名著中对面向对象设计的深刻理解,可以帮助大家从本质上看待如何理解对象设计及面向对象设计的原理,全是自己的心得和体会(当然是在巨人的基础上的),希望对大家有帮助。
《设计模式:可复用面向对象软件的基础》学习并理解 23 种设计模式
你将拥有一种深刻的洞察力,以帮助你设计出更加灵活的、模块化的、可复用的和易理解的软件—这也是你为何着迷于面向对象技术的源动力,不是吗? 当然还有一些提示和鼓励:第一次阅读此书时你可能不会完全理解...
面向对象,以及区别与面向过程,理解类和对象的概念,设有的实验
java面向对象基础,帮助您轻松理解面向对象概念以及面向对象的特征实现。
Python 是一种面向对象的解释型语言,面向对象是其非常重要的特性。《Python 3面向对象编程》通过Python 的数据结构、语法、设计...如果你拥有其他面向对象语言的经验,你会更容易理解《Python 3面向对象编程》的内容。
本章节主要是为C#学习者更方便的理解面对对象基础而准备的。
面向对象设计中最基本的两个概念一个是类,一个是对象,该PPT清楚的叙述了这两个基本概念的本质区别,有利于初学者理解这两个基本概念
本文对于面向的对象的基本概念进行了介绍,包括类、状态、行为、封装、共生、内聚、领域集,帮助你理解什么是OO及发现你的程序中所存在的设计问题。
java基础-理解面向对象
如果你读过extjs的原代码,一定知道它是基于面向对象思想代码。该代码不同于extjs,更加合理且容易理解。
这个文档是我本人通过学习JAVA面向对象部分总结出的文档,知识点都包含在内,继承,封装,多态等概念,以及相关代码并给于注释,面向对象部分是JAVA的核心部分,面向对象这部分是理解JAVA的最好途径,共大家学习借鉴...
如果你拥有其他面向对象语言的经验,你会更容易理解《Python 3面向对象编程》的内容。 目录 第1 章 面向对象设计 1 第2 章 Python 对象 24 第3 章 当对象是相似的 . 54 第4 章 异常处理 . 86 第5 章 何时使用面向...
Python 是一种面向对象的解释型语言,面向对象是其非常重要的特性。《Python 3面向对象编程》通过Python 的数据结构、语法、设计...如果你拥有其他面向对象语言的经验,你会更容易理解《Python 3面向对象编程》的内容。