OOP面向对象三大特点
OOP面向对象三大特点
(一)封装:将现实中一个事物的属性和功能集中定义在一个对象中。(创建对象)
创建对象的3种方式:
1.直接量方式:(创建一个单独的对象)
var obj={
属性名:值,
方法名:function(){ ...this.属性名...}
}
2. 用new方式:
var obj=new Object();
obj.属性名=值;
obj.方法名=function(){ ...this.属性名...}
3.反复创建多个相同结构的对象的方式:2步
①定义构造函数:
function 类型名(属性参数列表){
this.属性名=属性参数;
/*浪费内存,已被否定 this.方法名=function(){...this.属性名...}*/
}
② 用new调用构造函数: 实例化一个对象。
var obj=new 类型名(属性值列表);
/*new: 1.创建新的空对象;2.设置新对象的__proto__继承构造函数的原型对象;3.用新对象调用构造函数,为新对象添加规定的属性和方法。4.将新对象的地址保存到变量中 */
js中一切对象底层都是hash数组。
(二)继承:父对象中的成员,子对象无需重复定义,即可直接使用。(代码重用,节约内存)
js中的继承都是原型继承。
原型对象:集中存储一类子对象共有成员的父级对象。
原型链: 由各级对象的__proto__属性逐级继承,形成的链式结构。(原型链控制着对象中属性的使用顺序)
继承中相关的API:
1. 判断指定"属性名"是否是obj的自有属性: var bool=obj.hasOwnProperty("属性名")
2. 判断是否是共有属性: !obj.hasOwnProperty("属性名") &&("属性名" in obj)
3. 获取原型对象: 2种方式: 构造函数.prototype;Object.getPrototypeOf(child)
4. 删除属性: delete 对象.属性名
5. 判断一个对象是不是数组类型:
1. 判断father是否是child的原型链上的父级对象:father.isPrototypeOf(child);
2. 判断child是否是构造函数的实例:child instanceof 构造函数;
3. 输出对象的内部属性class: Object.prototype.toString.call(obj);
4. 判断obj是否是数组类型: Array.isArray(obj)
如何自定义继承: 3种:
1. 直接修改一个对象继承另一个对象:Object.setPrototypeOf(child,father);
2. 修改构造函数的原型对象,批量修改之后所有子对象的父对象:构造函数.prototype=father(时机: 在开始创建子对象之前就修改)
3. 两种类型间的继承: inherits&&extends
抽象: 如果多个子类型之间有相同的属性结构和方法定义,就要抽象出一个父类型,将相同的属性结构和方法定义统计定义在父类型中。
在子类型构造函数中借用父类型构造函数:extends扩展
function 子类型构造函数(...){
父类型构造函数.call(this,参数1,参数2,...)//new 子类型构造()->this->正在创建的新对象
...扩展新属性
}
其实: 父类型构造函数.call(this,参数1,参数2,...)可简写为:父类型构造函数.apply(this,arguments)
让子类型原型继承父类型原型:inherits继承
Object.setPrototypeOf(子类型原型, 父类型原型)
call vs apply:
相同:都是强行借用任意函数,并替换函数中的this为指定对象。
不同:参数:
call,只能将传入借用的函数的参数,单独传入。
apply,可将传入借用的函数的参数,以数组方式传入。apply可自动打散数组为单个参数。
(三)多态:
重写(override):如果子对象觉得父对象继承来的成员不好用,可子定义同名的自有成员,来覆盖父对象的成员。
OOP面向对象三大特点的更多相关文章
- OOP面向对象 三大特征 继承封装多态
OOP面向对象 ----三大特征 继承封装多态 面向对象(Object Oriented,OO)是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构 ...
- 面向对象编程(九)——面向对象三大特性之继承以及重写、Object类的介绍
面向对象三大特性 面向对象三大特征:继承 :封装/隐藏 :多态(为了适应需求的多种变化,使代码变得更加通用!) 封装:主要实现了隐藏细节,对用户提供访问接口,无需关心方法的具体实现. 继承:很好的实现 ...
- python 面向对象三大特性(封装 多态 继承)
今天我们来学习一种新的编程方式:面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)注:Java和C#来说只支持面向对象编程,而python比较灵活即支持面 ...
- OOP 面向对象 七大原则 (一)
OOP 面向对象 七大原则 (一) 大家众所周知,面向对象有三大特征继承封装多态的同时,还具有这七大原则,三大特征上一篇已经详细说明,这一篇就为大家详解一下七大原则: 单一职责原则,开闭原则,里氏 ...
- 用C实现OOP面向对象编程(1)
如摘要所说,C语言不支持OOP(面向对象的编程).并这不意味着我们就不能对C进行面向对象的开发,只是过程要复杂许多.原来以C++的许多工作,在C语言中需我们手动去完成. 博主将与大家一起研究一下如下用 ...
- 夯实Java基础系列1:Java面向对象三大特性(基础篇)
本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 [https://github.com/h2pl/Java-Tutorial](https: ...
- Swift -POP( 面向协议编程)与OOP(面向对象编程)
面向协议编程(Protocol Oriented Programming,简称POP),是Swift的一种编程范式,Apple于2015年WWDC提出的,如果大家看Swift的标准库,就会看到大量PO ...
- [.net 面向对象编程基础] (11) 面向对象三大特性——封装
[.net 面向对象编程基础] (11) 面向对象三大特性——封装 我们的课题是面向对象编程,前面主要介绍了面向对象的基础知识,而从这里开始才是面向对象的核心部分,即 面向对象的三大特性:封装.继承. ...
- [.net 面向对象编程基础] (12) 面向对象三大特性——继承
[.net 面向对象编程基础] (12) 面向对象三大特性——继承 上节我们说了面向对象的三大特性之一的封装,解决了将对同一对象所能操作的所有信息放在一起,实现统一对外调用,实现了同一对象的复用,降低 ...
随机推荐
- Cdoefroces #354
A题 题意:给定一些数,然后求一次交换以后最大的数和最小的数之间的最大距离 分析:找到最大数和最小数的位置,然后判断是把位置大的移到最后还是把位置小的移到开始位置即可 #include <ios ...
- css padding和margin的百分比
前段时间我同事对于margin和padding应用百分比值似乎有些误解,觉得可能是个普遍问题,所以觉得有必要拿出来单独写一下. margin和padding都可以使用百分比值的,但有一点可能和通常的想 ...
- js - AO链 与 function
先来看一下demo,如果你已经看出三个console.log分别输出什么.那直接关闭此笔记 function t(age) { console.log(age); var age = 99; cons ...
- 苹果应用商店AppStore审核中文指南 分类: ios相关 app相关 2015-07-27 15:33 84人阅读 评论(0) 收藏
目录 1. 条款与条件 2. 功能 3. 元数据.评级与排名 4. 位置 5. 推送通知 6. 游戏中心 7. 广告 8. 商标与商业外观 9. 媒体内容 10. 用户界面 11. 购买与货币 12. ...
- [vue最新实战] gank客户端(vue2 + vue-router2 + vuex +webpace + es6)新手福利,干货多多
vue-meizi 本项目是基于vue2最新实战项目,是适合新手进阶的绝佳教程.代码简单易懂,注释多多.实现了移动端使用最多的 无限滚动,图片加载,左右滑动,等待.先发布预览版本,后面更多更全的功能和 ...
- cocos2dx3.5 HTC One X 某些UI白屏或使用ClippingNode造成部分手机白屏
public Cocos2dxGLSurfaceView onCreateView() { Cocos2dxGLSurfaceView glSurfaceView = new Cocos2dxGLSu ...
- Js把IE COM数组列表转换成数组
今天写组件的时候遇到一个问题,就是当我需要对获取到的对象列表进行删减的时候,发现没有合适的方法,比如: //获取图片列表 var imgs = document.getElementsByTagNam ...
- Linux FTP 服务器配置简单说明
一. FTP 说明 linux 系统下常用的FTP 是vsftp, 即Very Security File Transfer Protocol. 还有一个是proftp(Profession ftp ...
- jmeter接口测试实践
一.什么是接口测试? 接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点.测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻 ...
- Linux释放内存脚本
vi recover_mem.sh #!/bin/bash ################## #author:rrhelei@126.com# ################## #系统分配的 ...