资讯专栏INFORMATION COLUMN

javascript面向对象之“多态”

JerryWangSAP / 2426人阅读

摘要:之前,本质上不能算是一门面向对象的编程语言,因为它对于封装继承多态这些面向对象语言的特点并没有在语言层面上提供原生的支持。所以在中出现了等关键字,解决了面向对象中出现了问题。

ES6之前,javascript本质上不能算是一门面向对象的编程语言,因为它对于封装、继承、多态这些面向对象语言的特点并没有在语言层面上提供原生的支持。
但是,它引入了原型(prototype)的概念,可以让我们以另一种方式模仿类,并通过原型链的方式实现了父类子类之间共享属性的继承以及身份确认机制。
其实,面向对象的概念本质上来讲不是指某种语言特性,而是一种设计思想。
正是由于javascript本身对面向对象编程没有一个语言上的支持标准,所以才有了五花八门、令人眼花缭乱的“类继承”的代码。
所以在ES6中出现了class extends等关键字,解决了javascript面向对象中出现了问题。
之前花了大量篇幅来讲述面向对象中的封装和继承
谈一谈javascript面向对象
javascript面向对象与原型
javascript 面向对象之一篇文章搞定call()方法")
javascript面向对象之继承(上)")
javascript面向对象之继承(下)")
javascript面向对象之ES6中的类和继承
今天我们研究一下javascript面向对象中的多态

javascript 多态

如果你在搜索引擎中搜索javascript多态,有那么一个栗子你一定会搜到
非多态代码示例

var makeSound = function( animal ){
    if ( animal instanceof Duck ){
        console.log( "嘎嘎嘎" );
    }else if ( animal instanceof Chicken ){
        console.log( "咯咯咯" );
    }
};

var Duck = function(){};
var Chicken = function(){};

makeSound( new Duck() ); // 嘎嘎嘎
makeSound( new Chicken() ); // 咯咯咯

多态的代码示例

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 Chicken());
makeSound(new Duck());

这个栗子出自《JavaScript设计模式与开发实践》,我手里没有这本书,但是不耽误我们去研究,这个

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/100223.html

相关文章

  • 面向对象三个基本特征(javaScript

    摘要:对象是公布其接口。节选自百度百科我对于封装的理解,可能还有一个步骤就是抽离,首先你要清楚在一个对代码中你应该抽离那些属性方法,有了这些为基础才能更好的做好封装。节选自百度百科因为是没有重载的概念的所以要自己编写逻辑完成重载。 1. 前言 2. 封装 3. 继承 4. 多态 5. 总结 1. 前言 了解过面向对象的同学应该都知道,面向对象三个基本特征是:封装、继承、多态,但是对于这三...

    IamDLY 评论0 收藏0
  • SegmentFault 技术周刊 Vol.32 - 七夕将至,你的“对象”还好吗?

    摘要:很多情况下,通常一个人类,即创建了一个具体的对象。对象就是数据,对象本身不包含方法。类是相似对象的描述,称为类的定义,是该类对象的蓝图或原型。在中,对象通过对类的实体化形成的对象。一类的对象抽取出来。注意中,对象一定是通过类的实例化来的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 马上就要到七夕了,离年底老妈老爸...

    李昌杰 评论0 收藏0
  • SegmentFault 技术周刊 Vol.32 - 七夕将至,你的“对象”还好吗?

    摘要:很多情况下,通常一个人类,即创建了一个具体的对象。对象就是数据,对象本身不包含方法。类是相似对象的描述,称为类的定义,是该类对象的蓝图或原型。在中,对象通过对类的实体化形成的对象。一类的对象抽取出来。注意中,对象一定是通过类的实例化来的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 马上就要到七夕了,离年底老妈老爸...

    Lyux 评论0 收藏0
  • SegmentFault 技术周刊 Vol.32 - 七夕将至,你的“对象”还好吗?

    摘要:很多情况下,通常一个人类,即创建了一个具体的对象。对象就是数据,对象本身不包含方法。类是相似对象的描述,称为类的定义,是该类对象的蓝图或原型。在中,对象通过对类的实体化形成的对象。一类的对象抽取出来。注意中,对象一定是通过类的实例化来的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 马上就要到七夕了,离年底老妈老爸...

    AaronYuan 评论0 收藏0
  • JavaScript面向对象的三大特征

    摘要:什么是面向对象本文不在论述。接下来说一下面向对象的三大特征在当中的实现。封装实现封装实现就是是对象内部的变化对外界是透明的不可见。这种做法使对象之间低耦合便于维护升级团队协作开发。。 概述 本来打算写设计模式的,在谈论js的设计模式之前先说一下js的面向对象,因为很多设计模式的实现都掺杂着面向对象的思想,所以先做一下前期铺垫。 js我们都知道是一种动态类型脚本型语言,变量类型无法保证,...

    chaosx110 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<