函数扩展(函数拦截)
在原有函数的基础上增加额外的操作:
1. 使用临时的函数名存储函数
2. 重新定义原来的函数 (直接将地址重新指向新区域)
3. 定义扩展的功能,调用临时函数
function func() {console.log('原始的功能')}// #1let _tmpFn = func// #2 指针重指func = function () {// #3_tmpFn()console.log('扩展功能')}func()
问题:在不改变 Array.prototype 的情况下,实现数组部分方法的重写。
分析:
继承关系: arr -> Array.prototype -> Object.prototype -> …
继承关系: arr -> 改写的方法 -> Array.prototype -> Object.prototype -> …
方案:采用原型式继承,修改原型链的结构。
let ARRAY_METHOD = ['push','pop','shift','unshift','reverse','sort','splice',
];
let arr = []
// function object(o) { function F() {} F.prototype = o; return new F(); }
// 通过原型实现对象之间的信息共享
// 原型式继承 array_methods是函数F()的实例,array_methods.__proto__指向Array.prototype
let array_methods = Object.create(Array.prototype)ARRAY_METHOD.forEach((method) => {// array_methods将Array.prototype上的方法重写array_methods[method] = function () {// 这里面实现函数重写// 借用原来的方法let res = Array.prototype[method].apply(this, arguments)return res}
})// 数组指向原型继承后的数组实例 则每次执行的就是拦截后的方法
arr.__proto__ = array_methods
函数扩展(函数拦截)相关推荐
- windows 下实现函数打桩:拦截API方式
windows 下实现函数打桩:拦截API方式 近期由于工作须要,開始研究函数打桩的方法. 由于不想对project做过多的改动,于是放弃了使用Google gmock的想法. 可是也足足困扰另外我一 ...
- C++对C的函数扩展
C++对C的函数扩展 inline内联函数 说明1 说明2 说明3 说明4 说明5 说明6 默认参数 函数默认参数的规则 函数占位参数 默认参数和占位参数 函数重载(Overroad 函数重载概念 函 ...
- ES6-ES11-第一部分-let、const、解构赋值、模板字符串、简化对象写法、箭头函数、函数参数默认值、rest 参数、扩展运算符、Symbol、迭代器、生成器、Promise、Set、Map
根据视频进行整理 [https://www.bilibili.com/video/BV1uK411H7on?p=1] 视频资源(百度网盘): 链接:[https://pan.baidu.com/s/1 ...
- 2021-02-24let和const,变量的解构赋值,函数扩展
文章目录 let 1.ES6简介 2.let关键字 2.1 不存在变量提升 2.2 暂时性死区 2.3 不允许重复声明 3.块级作用域 3.1 为什么需要块级作用域 缺点1:内部变量可能会覆盖外层的变 ...
- 图像滤波函数imfilter函数的应用及其扩展
一)认识imfilter函数 imfilter函数叫做实现线性空间滤波函数,主要功能可以实现多维数组的滤波,在图像领域就是对图像进行滤波. 滤波是一个统一的概念,在图像领域,图像的去除噪声点,图像提取 ...
- c++学习笔记内联函数,函数重载,默认参数
c++学习笔记内联函数,函数重载,默认参数 1 inline内联函数 C++中的const常量可以替代宏常数定义,如: const int A = 3; #define A 3 C++中是否有解决 ...
- python高阶函数闭包装饰器_Python_基础_(装饰器,*args,**kwargs,高阶函数,函数闭包,函数嵌套)...
一,装饰器 装饰器:本质就是函数,功能是为其它的函数动态添加附加的功能 原则:对修改关闭对扩展开放 1.不修改被修饰函数的源代码 2.不修改被修改函数的调用方式 装饰器实现的知识储备:高阶函数,函数嵌 ...
- 【Kotlin】函数类型 ( 函数类型 | 带参数名称的参数列表 | 可空函数类型 | 复杂函数类型 | 带接收者函数类型 | 函数类型别名 | 函数类型实例化 | 函数调用 )
文章目录 I . 函数类型 II . 带参数名的参数列表 III . 可空函数类型 IV . 复杂函数类型解读 V . 函数类型别名 VI . 带 接收者类型 的函数类型 VII . 函数类型实例化 ...
- 【转】回调函数,函数指针与函数对象
原文出处:http://shudingbo.spaces.live.com/blog/cns!C33400475B08F157!423.entry?wa=wsignin1.0&sa=24651 ...
- Python学习8 函数 匿名函数 内置函数
转换相关的方法-eval 转换相关的方法-json 函数基本语法大纲 函数概念 示例: 题目: 函数的参数 def f(x,y=1,*z,**abc):print(x,y,z,abc,sep=&quo ...
最新文章
- js过滤HTML标签以及空格
- 黄聪:php实现上传图片和等比例缩略图压缩图片
- 自建DNS服务器,了解一代防火墙必备网络环境,局域网设备域名访问教程
- Linux环境下安装OpenOffice 4.1.8
- python完全背包最优_python 完全背包问题_遗传算法Python实战 009.背包问题
- Http基本身份验证在Spring Security中如何工作?
- Python 之网络编程基础
- RiPro小八子主题V1.5.5美化版+优惠码折扣+工单系统+任务系统
- CSS3文字渐变效果
- 浏览器输入网址到页面呈现的过程
- macbook关闭镜像_如何在关闭时让MacBook保持清醒状态
- 计算机那种专业包括vr,VR技术的大学专业有哪些
- php总结与展望_2020 年的 PHP 回顾与展望
- JDBC Statements, PreparedStatement和CallableStatement语句
- 大数数字读法 unsigned long long
- 查看数据是否成功发送到kafka
- 在CentOS .65 64位安装OpenMeetings .3.0.1
- UEFI和Legacy的区别与系统支持 (图文详解)
- 腾讯与360之间引起的反思
- 基于集成运放心电放大器设计(原创)
热门文章
- 古典人物海报设计PSD分层模板,浓郁国风,展古典韵味
- 超绝万圣节主题设计海报背景,搞节日气氛靠它没问题!
- java volatitl_Java中的关键字volatitle
- QTableWidget item设置不可以选中和编辑状态
- Linux内核内存管理(3):kmemcheck介绍
- Linux内核构建与开发
- 必须了解的Web安全知识(第一部分:HTTPS,TLS,SSL,CORS,CSP)
- Django视图层:嵌套参数,URLconf在查找什么?指定视图参数的默认值、include()路由转发三种方式、传递额外选项给 include()、传递额外选项给视图
- UniversalVideoView
- idea开发搭建scala项目流程(二)