用Javascript实现面向对象编程(封装,抽象,继承,多态)
OO的特点:封装、抽象、继承、多态。
封装:在 面向对象语言中,封装特性是由类来体现的,我们将现实生活中的一类实体定义成类,其中包括属性和行为(在Java中就是方法),就好像人类,可以具有 name,sex,age等属性,同时也具有eat(),sleep()等行为,我们在行为中实现一定的功能,也可操作属性,这是面向对象的封装特性;
封装在js中很容易实现:
function Man() { this.name = ""; this.age = 18; this.work = function() { //coding(); } } var mzhou = new Man(); mzhou.name = "mzhou"; mzhou.age = 23;以上代码用Man类封装了人这一现实生活中的一类实体。
继承:继承就像是我们现实生活中的父子关系,儿子可以遗传父亲的一些特性,在面向对象语言中,就是一个类可以继承另一个类的一些特性,从而可以代码重用,其实继承体现的是is-a关系,父类同子类在本质上还是一类实体;
function Father() {
this.name = "father";
}
function Son() {
this.age = 18;
}
Son.prototype = new Father();
var son = new Son();
console.log(son.name);//father
son.name = "son";
console.log(son.name);//son
javascript中类的实现
prototype创建自定义对象的例子:
// 构造函数
function
Person(name, sex) {
this
.name = name;
this
.sex = sex;
}
// 定义Person的原型,原型中的属性可以被自定义对象引用
Person.prototype = {
getName:
function
() {
return
this
.name;
},
getSex:
function
() {
return
this
.sex;
}
}
把函数Person称为构造函数,也就是创建自定义对象的函数。可以看出,JavaScript通过构造函数和原型的方式模拟实现了类的功能。
创建自定义对象(实例化类)的代码:
1
2
3
4
|
var zhang = new Person( "ZhangSan" , "man" );
console.log(zhang.getName()); // "ZhangSan"
var chun = new Person( "ChunHua" , "woman" );
console.log(chun.getName()); // "ChunHua"
|
当代码var zhang = new Person("ZhangSan", "man")执行时,其实内部做了如下几件事情:
- 创建一个空白对象(new Object())。
- 拷贝Person.prototype中的属性(键值对)到这个空对象中(我们前面提到,内部实现时不是拷贝而是一个隐藏的链接)。
- 将这个对象通过this关键字传递到构造函数中并执行构造函数。
- 将这个对象赋值给变量zhang。
为了证明prototype模版并不是被拷贝到实例化的对象中,而是一种链接的方式,请看如下代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
function Person(name, sex) {
this .name = name;
this .sex = sex;
}
Person.prototype.age = 20;
var zhang = new Person( "ZhangSan" , "man" );
console.log(zhang.age); // 20
// 覆盖prototype中的age属性
zhang.age = 19;
console.log(zhang.age); // 19
delete zhang.age;
// 在删除实例属性age后,此属性值又从prototype中获取
console.log(zhang.age); // 20
|
这种在JavaScript内部实现的隐藏的prototype链接,是JavaScript赖以生存的温润土壤, 也是模拟实现继承的基础。
多态:多态就是通过传递给父类对象引用不同的子类对象从而表现出不同的行为,多态可为程序提供更好的可扩展性,同样也可以代码重用。因为js是弱类型语言,所以不能实现多态:
//Shape是Triangle的父类
public static void main(String[] args){
Triangle tri = new Triangle();
System.out.println("Triangle is a type of shape? " + tri.isShape());// 继承
Shape shape = new Triangle();
System.out.println("My shape has " + shape.getSides() + " sides."); // 多态
Rectangle Rec = new Rectangle();
Shape shape2 = Rec;
System.out.println("My shape has " + shape2.getSides(Rec) + " sides."); //重载
}
抽象:抽象就是将一类实体的共同特性抽象出来,封装在一个抽象类中,所以抽象在面向对象语言是由抽象类来体现的。比如鸟就是一个抽象实体,因为抽象实体并不是一个真正的对象,它的属性还不能完全描述一个对象,所以在语言中体现为抽象类不能实例化;
转载于:https://www.cnblogs.com/peng14/archive/2012/09/05/2671900.html
用Javascript实现面向对象编程(封装,抽象,继承,多态)相关推荐
- python面向对象编程 -- 封装、继承
面向对象编程 -- 封装.继承 面向对象编程三要素:封装.继承和多态.本文主要看和封装.继承相关的概念:在python中多态的概念比较模糊,本文不做讨论. 1 封装 封装:将数据和操作组装到一起,对外 ...
- python面向对象编程(封装与继承)
一. 面向过程编程语言 "面向过程"(Procedure Oriented)是一种以过程为中心的编程思想.分析出解决问题所需要的步 骤,然后用函数把这些步骤一步一步实现,使用的时候 ...
- javascript 面向对象编程(封装、继承)
在面向对象编程中,类(class)是对象(object)的模板,定义了同一组对象(又称"实例")共有的属性和方法. Javascript语言不支持"类",但是可 ...
- 在JavaScript面向对象编程中使用继承(5)
明天就要回老家去过年了,关于这个"在JavaScript面向对象编程中使用继承"的话题居然还没有说完.如果不完成,留下来一拖就拖到明年去了.所以还是抽空把它写完,今年的事情今年做, ...
- 如何理解面向对象的封装、继承、多态
如何理解面向对象的封装.继承.多态 面向对象可以说是一种对现实是事物的抽象,将一类事物抽象成一个类,类里面包含了这类事物具有的公共部分,以及我们对这些部分的操作,也就是对应的数据和过程. 面向对象思想 ...
- 了解使用JavaScript进行面向对象编程的基础(并增强您的编码…
by Kris Baillargeon 通过克里斯·拜伦 学习使用JavaScript进行面向对象编程的基础知识(并增强您的编码能力!) (Learn the basics of object-ori ...
- 【Python从零到壹】面向对象的封装,继承和多态
面向对象的三大特征:封装,继承,多态 文章目录 1. 封装 2. 继承 多态的实现 封装: 提高程序的安全性 将数据(属性)和行为(方法)包装到类对象中,在方法内部对属性进行对象的外部调用方法. 这样 ...
- W6_面向对象_封装_继承_多继承_多态
W6_面向对象_封装_继承_多继承_多态 80.81.82.83.第02章节-Python3.5-面向对象介绍 84.第05章节-Python3.5-实例变量与类变量 85.第06章节-Python3 ...
- 面向对象编程 封装 继承 多态(三大特征)(第三篇)
封装 封装是面向对象编程的三大特征之一. 封装有两方面的含义: 1.将数据(属性)和行为(方法)包装到类对象中.方法内部对属性进行操作,在类对象的外部调用方法.这样,无需关心方法内部的具体实现细节,从 ...
最新文章
- Atitit apache 和guava的反射工具
- 使用Docker来运行WebApp
- 收藏 | 分享 3 种脑洞大开的Excel技巧
- Java 获取链表的元素
- 计算机学院班徽在线设计,计算机学院班徽班旗设计大赛通讯稿
- python是什么语言
- rsyslogd以及日志轮替logrotate的梳理
- 浅谈数据结构-二叉树
- 狗狗大全(送给喜欢狗的人)
- 运用腾讯云实现QQ语音通话
- radiogroup多选_为何多组RadioGroup 里面的RadioButton 会出现多选状态​?
- 网络爬虫Matplotlib
- 快递管理系统项目整理
- 知到网课大学生心理健康教育考试试题|真题题库(含答案)
- ProgressBar.js – 漂亮的响应式 SVG 进度条
- Python使用随机森林预测泰坦尼克号生存
- 九度OJ-1185:特殊排序
- 通信工程与计算机考研学校排名,2019-2020信息与通信工程专业考研学校排名
- 影响互联网产品节奏的五大因素
- IMX6ULL裸机篇之DDR3参数配置分析