面向对象
来源:互联网 发布:魔术师约翰逊生涯数据 编辑:程序博客网 时间:2024/06/14 00:01
面向对象[Oriented Object]:面向对象不是一个技术,而是一种处理问题的思路,是一种编程思想,面向对象,是将程序中的数据
和功能进行封装,以达到代码复用性、低耦合、增强代码功能扩展。面向对象已经被广泛应用于各种编程语言中,是当下流行的一种
编程语言处理需求的理念。面向对象的基础,就是类和对象的概念和使用!
类和对象:
类:类型的简称,数据类型的简称;是一个概念、代号,如人、电脑、飞机等等
对象:类的某个具体的实例,是一个实际存在的物体,如陈伟霆、dell电脑、波音747
类和对象,是面向对象编程的基础
1)原始的封装模式:通过JSON数据来模拟一种数据类型
/* 1.1 定义一个李达康书记?*/ /* 只是开发人员自己人为规定了,四个变量用来描述一个人物对象 */ var _name = "李达康"; var _age = 48; var _job = "市委书记"; var _wife = "欧阳菁"; var _name2 = "候亮平"; var _age2 = 45; var _job2 = "侦查处长"; var _wife2 = "局长"; /* 1.2. 对零散数据的封装 * Js中,通过JSON对象对零散数据的封装,避免了数据之间产生互相影响的情况 * */ /* 人:一种类型,一种数据类型,简称类 和整数类型、浮点数类型、字符串类型等等一样,就是一种数据类型 */ var People = {/*模拟定义了一个人的类型【数据类型】*/ name:"", age:0, job:"", wife:"" }; var kangKang = {}; kangKang.name = "李达康"; kangKang.age = 48; kangKang.job = "市委书记"; kangKang.wife = "欧阳菁"; var houZi = {}; houZi.name = "侯亮平"; houZi.age = 45; houZi.job = "反贪局长"; houZi.wife = "某局长"; console.log(kangKang); console.log(houZi);
JSON分装就面向对象的思想来说,存在一定的缺陷
kangKang[对象]和People[类]之间没有任何关系
kangKang[对象]和houZi[对象]之间没有任何关系
这样的封装模式下,如果对象比较多,就会让代码的复杂度提升的非常严重
2)函数封装模式
另外一种情况下通过函数进行改进,函数通过返回一个JSON对象的形式来优化创建对象的复杂度,提高代码的复用性
function People (name, age, job, wife) { return { name:name, age:age, job:job, wife:wife } } var kangKang = People("李达康", 48, "市委书记", "欧阳菁"); var houZi = People("侯亮平", 45, "反贪局张", "某局长");
上面两种封装模式,都是通过JSON数据对象的形式进行封装,只是满足面向对象编程中的封装的特征。不是完整的面向对象!
但是这样的封装存在着以下问题:
对象和类之间没有任何关系,同一个类的多个对象之间没有任何关系
这样原始的对象封装,在项目开发时,要使用在什么地方:
单例模式:当程序中,某个对象只能出现一次的时候,使用JSON对象直接封装
3)构造函数
JavaScript提供了一种模拟面向对象的语法,通过函数的方式来模拟定义类型,定义好类型之后,通过new关键字来创建对象
var People = function(name, age, gender) { this.name = name; this.age = age; this.gender = gender; this.search = function() { console.log("搜查令......"); } } var houZi = new People("侯亮平", 45, "男"); var chenHai = new People("陈海", 42, "男"); //console.log(houZi, chenHai); /* 实例对象,有一个constructor属性,指向的是创建自己的构造函数 */ // 两个对象之间的关系,都是通过同一个构造函数创建出来的// console.log(houZi.constructor);// console.log(chenHai.constructor);// console.log(houZi.constructor == chenHai.constructor); // 对象和类型之间的关系,对象是否某种烈性:通过instanceof 关键字来判断 console.log(houZi instanceof People);//houZi是否是People类型 console.log(chenHai instanceof People);//houZi是否是People类型
4)JS内存分析
程序是运行在计算中的进程,一旦程序要开始运行,必须要向操作系统申请内存空间以支持存取和计算程序运行过程中的各种数据
4)继承
继承:体现的是A is a B的关系,同样也体现的是一种类型的关联关系
继承是为了提高对象之间的关联关系和提高代码的复用性和功能扩展性
JS中实现继承有非常多的方式,常见的方式如下:
通过apply/call的形式进行继承
通过prototype的方式进行继承
直接通过prototype进行继承
通过空的中间对象进行间接的继承
拷贝继承
/* 继承的第一种方式:通过apply/call实现假继承 apply/call方法都是通过改变函数中第一个参数的指向来达到扩展代码功能的目的 唯一的区别就是apply和call后面的参数不一样! */ /*var Animal = function(name, color) { this.name = name; this.color = color; } Animal.prototype.eat = function() {console.log("吃肉");} var Cat = function(name, color, age, type) { // Animal.apply(this, [name, color]); Animal.call(this, name, color); this.age = age; this.type = type; } Cat.prototype.caches = function() {console.log("抓老鼠..");} var cat = new Cat("tom", "黑色", 48, "猫科"); console.log(cat);*/ /** * 2.通过prototype和空对象进行间接继承 */ var _extends = function(Child, Parent) { var F = function() {}; F.prototype = Parent.prototype; Child.prototype = new F(); Child.prototype.constructor = Child; } var Animal = function(name,age) { this.name = name; this.age = age; } Animal.prototype.play = function() {console.log("play gaming!");} var Cat = function(name, age, color) { this.color = color; } _extends(Cat, Animal); var cat = new Cat(); console.log(cat);
1 0
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- 面向对象
- JNI 原理与入门
- Python获取当前时间及格式化
- 随手记录--线程
- Windows安装Pillow错误解决
- 漫谈C++:良好的编程习惯与编程要点
- 面向对象
- js时间戳、毫秒格式化
- Difference between Stack.capacity() and Stack.size()
- 数据结构—单链表
- 随手记录--xml in java
- BZOJ 1079 [SCOI2008] 着色方案
- 基于 Django1.10 文档的深入学习(28)—— Managing static files(e.g. images, JavaScript, CSS)
- 【C语言训练】委派任务
- Flask 使用消息闪烁(flash)报错