JS 怎样模拟类的特性
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.实现 Dog
与 Animal
类之间的多态,方法重写等
// 测试代码(直接在浏览器控制台中运行):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 怎样模拟类的特性相关推荐
- js中的类、继承、闭包
一.js中的类 类:在面向对象编程中,类(class)是对象(object)的模板,定义了同一组对象(又称"实例")共有的属性和方法. Javascript是一种基于对象(obje ...
- Javascript 的函数式对象(三)利用闭包模拟类的静态变量和方法
除了模拟类的私有变量和私有方法.闭包还可用来模拟类的静态变量和方法. 除了再次利用js的闭包特性,还需要借助js语法上的一些特点. 执行上述代码后,浏览器控制台将会输出如下字符串: Created 1 ...
- new 实例化对象是啥意思_二. 初步认识JS中的类和对象
1 构造函数的定义 在JS中, 没有类(class)的概念, 主要是通过构造函数来模拟的. 语法 function 构造函数名 () {// 函数体} 使用function关键字表示定义一个构造函数 ...
- poj1068解题报告(模拟类)
POJ 1068,题目链接http://poj.org/problem?id=1068 题意: 对于给出给出的原括号串S,对应两种数字密码串P.W: S (((()()()))) P- ...
- Atitit.js模块化 atiImport 的新特性javascript import
Atitit.js模块化 atiImport 的新特性javascript import 1. 常见的js import规范amd ,cmd ,umd1 1.1. Require更多流行3 2. at ...
- java的知识点11——面向对象的三大特征之一继承、instanceof 运算符、方法的重写override、Object类基本特性、toString方法
面向对象的三大特征:继承.封装.多态 继承的实现 继承让我们更加容易实现类的扩展.子类是父类的扩展 使用extends实现继承 package cn.sxt;public class Test {pu ...
- Python 类的特性讲解
类的特性 #定义一个类, class是定义类的语法,Role是类名, (object)是新式类的写法,必须这样 写,以后再讲为什么 class Role(object): #初始化函数,在生成一个角色 ...
- wxWidgets:wxWidgets 示例展示了 wxDisplay 类的特性
wxWidgets:wxWidgets 示例展示了 wxDisplay 类的特性 wxWidgets:wxWidgets 示例展示了 wxDisplay 类的特性 wxWidgets:wxWidget ...
- Java 类的特性2
Java 类的特性2 类属性.类方法的设计思想 类属性作为该类各个对象之间共享的变量.在设计类时,分析哪些类属性不因对象的不同而改变,将这些属性设置为类属性.相应的方法设置为类方法. 如果方法与调用者 ...
最新文章
- sdut 3335 数据结构实验之栈与队列八:栈的基本操作
- sp烘焙流程_3分钟带你快速入门substance painter 贴图制作
- 统计学---掌握数据的整体状态
- @MarkFan 口语练习录音 20140415 [MDL演讲口语录音]
- 文件系统损坏导致虚拟机无法正常启动的问题及解决方法
- 使用Java第2部分查询DynamoDB项
- python教材目录,python 目录
- 原来公司需要这样的你
- Linux的常用基础命令
- 阿里java工具包_阿里开源的Java诊断工具Arthas(阿尔萨斯)
- initcall机制原理及实践
- 【源码】迭代法求根的matlab算法
- 面试知识储备:新浪微博Android客户端的实现
- 信号量(semaphore)解决司机与售票员问题
- win11键盘失灵 windows11键盘失控 键盘没反应
- 2018ACM-ICPC焦作站E题Resistors in Parallel
- 深度学习的几何观点:1流形分布定律、2学习能力的上限。附顾险峰教授简历(长文慎入,公号回复“深度学习流形分布”可下载PDF资料)
- 蛇形走线用于什么方面,一文告诉你
- java接口的一些理解(未完待续)
- 微积分-复合函数求导