摘要:首先捋清楚类和对象的关系类比如人类,指的是一个范围对象比如某个人,指的是这个范围中具体的对象中的作为构造函数时,就是一个类,通过操作符,可以返回一个对象。
JS中的类与类的继承
我们知道,JS中没有类或接口的概念,即不能直接定义抽象的类,也不能直接实现继承。不过,为了编程的方便,我们可以在 JS 中模拟类和继承的行为。
首先捋清楚类和对象的关系:
类:比如人类,指的是一个范围; 对象:比如某个人,指的是这个范围中具体的对象
js中的function作为构造函数时,就是一个类,通过new操作符,可以返回一个对象。
类的声明:
第一种:传统构造函数声明
function Animal(){ this.name = "tiger" }
第二种:ES6中的class声明
class Animal{ constructor(){ this.name = "tiger" } }
生成实例:
虽然类的声明有多种方式不尽相同,但是类生成实例相同
new Animal, new Animal2 // 没有参数时候 ()可以省略
类的继承的2种方式(主要说明es5传统构造函数的方式):
第一种:借助构造函数实现继承
原理
子类继承父类,通过call/apply改变父类构造函数的this指向
缺点
只实现了部分继承,仅继承了父类的属性,并没有继承父类的原型对象上<原型链上>的方法
第二种:借助原型链实现继承
原理
通过继承__proto__实现原型链继承:
1 在当前Child2实例上查找dance方法
2 发现没有 就会去 proto 上面去找dance方法
3 Child2实例的 proto === Parent2实例
4 去Parent2实例上查找dance方法 发现没有
5 去Parent2实例的 proto 查找dance方法
6 找到。
缺点
如果实例两个对象 改变其中一个对象的属性/方法 另一个对象也会跟着改变(因为改变的是原型链)
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/98209.html
摘要:前言是面对对象的语言,因此有必要单独纪录下对象的各种定义和理解。面对对象基本概述概述是基于面向过程的变成思想,是对面向过程的一种封装。面对对象开发就是不断的创建对象,使用对象,指挥对象做事情。面对对象设计其实就是在管理和维护对象之间的关系。 前言 java是面对对象的语言,因此有必要单独纪录下对象的各种定义和理解。 面对对象,主要包括:面向对象思想,类与对象及其使用,对象的内存图,成...
摘要:引申意义子类可以扩展父类的功能,但不能改变父类原有的功能。含义当子类的方法实现父类的方法时重写重载或实现抽象方法,方法的后置条件即方法的输出返回值要比父类更严格或相等。优点约束继承泛滥,开闭原则的一种体现。降低需求变更时引入的风险。 0x01.开闭原则 定义:一个软件实体如类,模块和函数应该对扩展开放,对修改关闭 要点: 当变更发生时,不要直接修改类,而是通过继承扩展的方式完成变...
摘要:构造类以及继承构造函数方法该种方式下的继承封装一个函数绑定复制继承对象创建方法类的实现该种方式下的继承极简主义法实现一个类睡觉睡觉类的私有属性和方法在方法中,只要不是定义在对象上的方法和属性,都是私有的该变量只能通过公有方法来读取类的数据共 构造类以及继承 构造函数方法 function Person(name) { this.name = name } Person.pro...
阅读 768·2023-04-26 00:30
阅读 2661·2021-11-23 09:51
阅读 1026·2021-11-02 14:38
阅读 2528·2021-09-07 10:23
阅读 2207·2021-08-21 14:09
阅读 1266·2019-08-30 10:57
阅读 1590·2019-08-29 11:20
阅读 1112·2019-08-26 13:53