设计模式之---多态、封装、继承
来源:互联网 发布:淘宝天猫电器城 编辑:程序博客网 时间:2024/06/03 05:59
多态
多态背后的思想是将“做什么”和“谁去做以及怎样去做”分离开来。把不变的部分隔离出来,把可变的部分封装起来。多态最根本的好处是你不必向对象询问“你是什么类型”,只管调动对象的行为。
var makeSound = function (animal) { animal.sound();}var Duck = function () {};Duck.prototype.sound = function () { console.log("嘎嘎嘎");}var Chicken = function () {}Chicken.prototype.sound = function () { console.log("咯咯咯");}makeSound(new Duck());makeSound(new Chicken());
静态语言面向对象的设计思路通常是向上转型,将Duck和Chicken抽象抽Animal类,在Animal类中定义发声方法。而javascript是动态语言,不会在编译时检查类型,不需要向上转型。下面的例子把动物发出叫声的方法抽象出来。
封装
通过封变化的方式,把系统中稳定不变的部分和容易变化的部分隔离开来,在系统的演变过程中,我们只需要替换那些容易变化的部分。
基于原型的继承
ECMAScript5提供了Object.create来克隆对象
var Plane = function () { this.blood = 100; this.attackLevel = 1; } var plane = new Plane(); plane.blood = 500; plane.attackLevel = 10; var clonePlane = Object.create( plane ); Object.create = Object.create || function (obj) { var F = function () {} F.prototype = obj; return new F(); }
原型特性:1.当对象无法响应某个请求时,会把该请求委托给它自己的原型。 2.对象会记住它的原型 __proto__指向原型。 3.所有数据都是对象javascript中的根对象是Object.prototype,我们遇到的对象都是由Object.prototype克隆而来的。
console.log(Object.getPrototypeOf(obj) === Object.prototype) //true
b沿着原型链找name
var A = function () {}A.prototype = { name : 'seven'}var B = function () {}B.prototype = new A();var b = new B();console.log( b.name )
Es6引入类的概念
class Animal { constructor(name){ this.name = name; } getName(){ return this.name; }}class Dog extends Animal{ constructor(name){ super(name); } speak(){ return "woof" }}var dog = new Dog("Scamp");console.log(dog.getName() + "says"+ dog.speak());
阅读全文
0 0
- 设计模式之---多态、封装、继承
- 【设计模式】面向对象之封装、继承、多态
- C语言设计模式-封装-继承-多态
- 设计模式_Java多态,继承,封装
- JavaScript设计模式基础-----封装、继承、多态
- C语言和设计模式(继承、封装、多态)
- C语言和设计模式(继承、封装、多态)
- C语言和设计模式(继承、封装、多态)
- C语言和设计模式(继承、封装、多态)
- C语言和设计模式(继承、封装、多态)
- 01.C语言和设计模式(继承、封装、多态)
- 2、C语言和设计模式(继承、封装、多态)
- C语言和设计模式(继承、封装、多态)
- 设计模式前奏–封装继承
- 继承设计之状态模式-多态
- 0.1-设计模式怎么样解决设计问题-抽象与封装、继承、多态
- c++之封装、继承、多态
- C++之封装、继承、多态
- H.264 编解码的过程是怎样的?H.264 码流的结构是怎样的?
- linux中cat、more、less、tail、head命令的区别
- uart通信判断数据接收完成方法——超时检测法
- unit9
- PCA(主成份分析),计算物体旋转角度
- 设计模式之---多态、封装、继承
- Docker : Java+Tomcat环境搭建
- c++能否在析构函数和构造函数中抛出异常?
- mybatis中的转义字符使用
- edgesForExtendedLayout浅淡
- adb shell am命令
- 使用httpclient传输文件
- 初学opencv遇到的问题及解决办法(2)
- AMD ryzen fedora26 安装Nvidia驱动