function Animal(){}

function Dog(){}

1.实现 Dog 继承 Animal

Dog.prototype = Object.create(Animal.prototype)

背景知识:要实现 Dog 继承 Animal, 就是要实现 new Dog() instanceof Animal 为真就是要实现 new Dog().__proto__.__proto__ === Animal.prototype即实现 Animal.prototype 在 new Dog() 的原型链上
实现过程:根据js原型链的相关知识, 有 new Dog().__proto__ === Dog.prototype要实现继承, 就可以令 Dog.prototype.__proto__ === Animal.prototype也就是 Dog.prototype = Object.create(Animal.prototype)
复制代码
// 测试代码(直接在浏览器控制台中运行):function Animal(){}function Dog(){}Dog.prototype = Object.create(Animal.prototype);console.log(new Dog() instanceof Animal);//结果为 true
复制代码

2.实现 DogAnimal 类之间的多态,方法重写等

// 测试代码(直接在浏览器控制台中运行):function Animal(){}function Dog(){}Object.defineProperties(Animal.prototype,{name:{value(){return 'Animal';}},say:{value(){return 'I’m ' + this.name();}}});//子类Dog继承父类Animal中的方法Dog.prototype = Object.create(Animal.prototype);console.log(new Dog().say());//结果为 I’m Animal//子类Dog重写父类Animal的name方法Dog.prototype = Object.create(Animal.prototype,{name:{value(){return 'Dog';}}});console.log(new Dog().say());//结果为 I’m Dog
复制代码

3.完善类的模拟

// 测试代码(直接在浏览器控制台中运行):function Animal(){}function Dog(){}Dog.prototype = Object.create(Animal.prototype);console.log(Dog.prototype.constructor);//结果为 ƒ Animal(){}//上面的这个输出是不对的, 结果应该是 ƒ Dog(){}, 解决方法Dog.prototype = Object.create(Animal.prototype,{constructor:{value:Dog,enumerable:false} });console.log(Dog.prototype.constructor);// 结果为 ƒ Dog(){}
复制代码

转载于:https://juejin.im/post/5ca20f32f265da308a2897f3

JS 怎样模拟类的特性相关推荐

  1. js中的类、继承、闭包

    一.js中的类 类:在面向对象编程中,类(class)是对象(object)的模板,定义了同一组对象(又称"实例")共有的属性和方法. Javascript是一种基于对象(obje ...

  2. Javascript 的函数式对象(三)利用闭包模拟类的静态变量和方法

    除了模拟类的私有变量和私有方法.闭包还可用来模拟类的静态变量和方法. 除了再次利用js的闭包特性,还需要借助js语法上的一些特点. 执行上述代码后,浏览器控制台将会输出如下字符串: Created 1 ...

  3. new 实例化对象是啥意思_二. 初步认识JS中的类和对象

    1 构造函数的定义 在JS中, 没有类(class)的概念, 主要是通过构造函数来模拟的. 语法 function 构造函数名 () {// 函数体} 使用function关键字表示定义一个构造函数 ...

  4. poj1068解题报告(模拟类)

    POJ 1068,题目链接http://poj.org/problem?id=1068 题意: 对于给出给出的原括号串S,对应两种数字密码串P.W: S         (((()()()))) P- ...

  5. Atitit.js模块化 atiImport 的新特性javascript import

    Atitit.js模块化 atiImport 的新特性javascript import 1. 常见的js import规范amd ,cmd ,umd1 1.1. Require更多流行3 2. at ...

  6. java的知识点11——面向对象的三大特征之一继承、instanceof 运算符、方法的重写override、Object类基本特性、toString方法

    面向对象的三大特征:继承.封装.多态 继承的实现 继承让我们更加容易实现类的扩展.子类是父类的扩展 使用extends实现继承 package cn.sxt;public class Test {pu ...

  7. Python 类的特性讲解

    类的特性 #定义一个类, class是定义类的语法,Role是类名, (object)是新式类的写法,必须这样 写,以后再讲为什么 class Role(object): #初始化函数,在生成一个角色 ...

  8. wxWidgets:wxWidgets 示例展示了 wxDisplay 类的特性

    wxWidgets:wxWidgets 示例展示了 wxDisplay 类的特性 wxWidgets:wxWidgets 示例展示了 wxDisplay 类的特性 wxWidgets:wxWidget ...

  9. Java 类的特性2

    Java 类的特性2 类属性.类方法的设计思想 类属性作为该类各个对象之间共享的变量.在设计类时,分析哪些类属性不因对象的不同而改变,将这些属性设置为类属性.相应的方法设置为类方法. 如果方法与调用者 ...

最新文章

  1. sdut 3335 数据结构实验之栈与队列八:栈的基本操作
  2. sp烘焙流程_3分钟带你快速入门substance painter 贴图制作
  3. 统计学---掌握数据的整体状态
  4. @MarkFan 口语练习录音 20140415 [MDL演讲口语录音]
  5. 文件系统损坏导致虚拟机无法正常启动的问题及解决方法
  6. 使用Java第2部分查询DynamoDB项
  7. python教材目录,python 目录
  8. 原来公司需要这样的你
  9. Linux的常用基础命令
  10. 阿里java工具包_阿里开源的Java诊断工具Arthas(阿尔萨斯)
  11. initcall机制原理及实践
  12. 【源码】迭代法求根的matlab算法
  13. 面试知识储备:新浪微博Android客户端的实现
  14. 信号量(semaphore)解决司机与售票员问题
  15. win11键盘失灵 windows11键盘失控 键盘没反应
  16. 2018ACM-ICPC焦作站E题Resistors in Parallel
  17. 深度学习的几何观点:1流形分布定律、2学习能力的上限。附顾险峰教授简历(长文慎入,公号回复“深度学习流形分布”可下载PDF资料)
  18. 蛇形走线用于什么方面,一文告诉你
  19. java接口的一些理解(未完待续)
  20. 微积分-复合函数求导

热门文章

  1. 《深入理解Java虚拟机》笔记5——类加载机制与字节码执行引擎
  2. 领域驱动设计在互联网业务开发中的实践
  3. 实例分析JAVA CLASS的文件结构
  4. Tomcat7目录结构详解(非常详细)
  5. Java核心技术点之动态代理
  6. Font Awesome-一款吊炸天的字体图标插件中文全介绍
  7. 浅谈L0,L1,L2范数及其应用
  8. 编程之美-双线程高效下载方法整理
  9. 信息系统项目管理师:论项目的沟通管理
  10. 大话设计模式(二 代码规范、重构)