当前位置: 首页 > news >正文

原型链、闭包、手写一个闭包函数、 闭包有哪些优缺点、原型链继承

什么是原型链?

原型链是一种查找规则

为对象成员查找机制提供一个方向

因为构造函数的 prototype 和其实例的 __ proto __ 都是指向原型对象的

所以可以通过__proto__ 查找当前的原型对象有没有该属性,

没有就找原型的原型, 依次类推一直找到Object( null ) 为止

这种链式查找过程称之为原型链

什么是闭包?

闭包(closure)指有权访问另一个函数作用域中变量的函数。简单理解就是 ,一个作用

域可以访问另外一个函数内部的局部变量。

function fn() {var num = 10;function fun() {console.log(num); }return fun;
}
var f = fn(); 
f();

优点: 延长变量作用域、在函数的外部可以访问函数内部的局部变量,

缺点: 容易造成内层泄露,因为闭包中的局部变量永远不会被回收 解决方法: 需要手动清除 把变量变为null

继承

Call 式继承继承的是属性,原型继承继承的是方法。

// #1 Call 式继承 / 构造函数继承:继承的是属性
Person.call(this, name, age)
// #2 原型继承:继承的是方法
Star.prototype = new Person()
Star.prototype.constructor = Star

将需要继承的对象挂到当前对象的原型对象上面, 通过原型链访问

子类的原型对象 = 父类的构造函数创建出的对象

特点:1、实例可继承的属性有:实例的构造函数的属性,父类构造函数属性,父类原型的属性。(新实例不会继承父类实例的属性!

缺点:1、新实例无法向父类构造函数传参。

   2、继承单一。

   3、所有新实例都会共享父类实例的属性。(原型上的属性是共享的,一个实例修改了原型属性,另一个实例的原 型属性也会被修改!)

混合式继承

  1. 遍历父对象成员, 添加给子对象构造函数的原型

    • 特点: 多个对象继承, 不会覆盖原来的默认原型

    • 缺点: 代码量增多

ES6 class类实现继承

// 创建一个父类class father {// 在 constructor 里面定义实例constructor(house, car) {this.house = housethis.car = car}// 在外面定义方法sayHi() {console.log('你好啊')}}// 实例化 fatherconst f = new father('汤臣一品', '劳斯莱斯')console.log(f)// 子类继承父类class son extends father {// 如果没有提供构造函数, 在继承时, 会默认自动借调父构造函数	constructor(house, car, study) {// 你写的构造函数中, 没有借调父构造函数super(house, car) // 触发调用父构造函数, 进行实例的属性初始化this.study = 'study'}work() {console.log('找乐子')}}// 实例化 sonconst s = new son('乐高一号', '跑跑卡丁车', '做美食')console.log(s)

通过class声明一个类,constructor()作为构造函数,属性在constructor()中初始化

可以在class内定义非静态方法,静态方法绑定在构造器上

类的所有方法都是不可枚举的,也符合内部方法

实例化一个class必须要new关键字

extends实现继承,子类中调用super()访问父类构造函数

http://www.lryc.cn/news/362463.html

相关文章:

  • linux中SSH_ASKPASS全局变量的作用
  • 9 -力扣高频 SQL 50 题(基础版)
  • TCP的重传机制
  • pg 数据库,获取时间字段值的具体小时,赋值给其他字段
  • 做视频号小店什么类目最容易爆单?其实,弄懂这三点就会选品了
  • Nginx作为下载站点
  • vue3简单快速实现主题切换功能
  • 国联易安:网络反不正当竞争,要防患于未然
  • Linux 网络配置 01
  • 快速入门C++正则表达式
  • java —— 缓冲字符输入流/缓冲字符输出流
  • blender从视频中动作捕捉,绑定到人物模型
  • 掘金滑块验证码安全升级,继续破解
  • 数据结构练习题——Java实现
  • 行为设计模式之状态模式
  • 找回以前的视频:技术与实践3个指南
  • GCN 代码解析(一) for pytorch
  • 2024年云计算、信号处理与网络技术国际学术会议(ICCCSPNT 2024)
  • 希尔排序法
  • thinkphp6.0版本下子查询sql处理
  • flowable工作流 完成任务代码 及扩展节点审核人(实现多级部门主管 审核等)详解【JAVA+springboot】
  • 【电源专题】一体成型电感为什么需要注意耐压问题
  • 如何看待时间序列与机器学习?
  • vue图标不显示
  • 文件夹如何加密码全攻略,5个文件夹加密方法新手也能学
  • useState和store的区别
  • vscode远程登录阿里云服务器【使用密钥方式--后期无需再进行密码登录】【外包需要密码】
  • 解决uniapp里的onNavigationBarSearchInputClicked不生效
  • Windows下搭建Cmake编译环境进行C/C++文件的编译
  • 实用新型专利申请材料的撰写与准备