先说明一下为什么要写这个,因为最近在面试,面试的时候面试官问了这个问题,当时是真的没有答上来,回来之后自己考虑了一下,现在给大家分享

要求如下:

重写js push函数,使其能够在push的同时打印出push的元素

分析

有的同学有可能想要用Array.Array.prototype.push = function(){}来重写,但是这样子的话push原本的函数内容就会丢失,你得重写push的逻辑,这样就很麻烦。于是我们想到得先把原本的push函数备份一下,然后重写的时候调用就可以了。

let _push = Array.prototype.push
Array.prototype.push = function(){
for(let i of arguments){
_push.call(this, i);
}
console.log('参数为', arguments);
} let a = [1,2,3]
a.push(4,5,6)

这个时候控制台已经打印出了我们想要的结果

参考文档

  1. MDN web文档

    面试题 js重写原生函数(以push为例)的更多相关文章

    1. 《You dont know JS》原生函数

      原生函数 原生函数,即JavaScript的内建函数(built-in function).常用的原生函数有String().Number().Boolean().Array().Object().F ...

    2. JS的原生函数

      常用的原生函数有: String() Number() Boolean() Array() Object() Function() RegExp() Date() Error() Symbol() 1 ...

    3. 类型和原生函数及类型转换(二:终结js类型判断)

      typeof instanceof isArray() Object.prototype.toString.call() DOM对象与DOM集合对象的类型判断 一.typeof typeof是一个一元 ...

    4. js经典试题之数组与函数

      js经典试题之数组与函数 1:列举js的全局函数? 答案:JavaScript 中包含以下 7 个全局函数escape( ).eval( ).isFinite( ).isNaN( ).parseFlo ...

    5. 前端面试题 -- JS篇

      前端面试题 -- JS篇 类型 1.js中有哪些数据类型,并解释清楚原始数据类型和引用数据类型 js中共有null,undefined, string,number,boolean,object六种数 ...

    6. JS常用自定义函数总结

      JS常用自定义函数总结   1.原生JavaScript实现字符串长度截取 2.原生JavaScript获取域名主机 3.原生JavaScript清除空格 4.原生JavaScript替换全部 5.原 ...

    7. 前端开发面试题JS

      1.介绍js的基本数据类型. Undefined.Null.Boolean.Number.String. ECMAScript 2015 新增:Symbol(创建后独一无二且不可变的数据类型 ) 2. ...

    8. js中getByClass()函数

      js中getByClass()函数进化史 对于js来说,我想每一个刚接触它的人都应该会抱怨:为什么没有一个通过class来获取元素的方法.尽管现在高版本的浏览器已经支持getElementsByCla ...

    9. js基础 js自执行函数、调用递归函数、圆括号运算符、函数声明的提升 js 布尔值 ASP.NET MVC中设置跨域

      js基础 目录 javascript基础 ESMAScript数据类型 DOM JS常用方法 回到顶部 javascript基础 常说的js包括三个部分:dom(文档document).bom(浏览器 ...

    随机推荐

    1. 让configure和cmake编译时支持调试选项

      在Linux先编译软件基本都是采用configure文件生成makefile,或者,cmake生成makefile文件两种方式.它们生成的makefile文件,一般默认不支持-g调试选项.但我们使用这 ...

    2. 使用acme.sh申请&自动续期LetsEncrypt免费SSL证书(转)

      一.简介 LetsEncrypt是一个免费.自动.开放的证书颁发机构.acme.sh 实现了 acme 协议, 可以从 LetsEncrypt 生成免费的证书. 本文介绍如何使用acme.sh来签发并 ...

    3. Collaborative Spatioitemporal Feature Learning for Video Action Recognition

      Collaborative Spatioitemporal Feature Learning for Video Action Recognition 摘要 时空特征提取在视频动作识别中是一个非常重要 ...

    4. django项目中的ajax分页和条件查询。

      1,路由 #主页面路由 re_path('article/article_list/', article.article_list,name='article/article_list/'), #分页 ...

    5. Manacher算法(马拉车)求最长回文子串

      Manacher算法求最长回文字串 算法思路 按照惯例((・◇・)?),这里只是对算法的一些大体思路做一个描述,因为找到了相当好理解的博客可以参考(算法细节见参考文章). 一般而言,我们的判断回文算法 ...

    6. 遍历php的_SERVER数组键值信息

      $_SERVER 是一个包含了诸如头信息(header).路径(path).以及脚本位置(script locations)等等信息的数组.这个数组中的项目由 Web 服务器创建.不能保证每个服务器都 ...

    7. 关系型数据库 RDS(Relational Database Service),知识点

      资料 网址 官方介绍 https://help.aliyun.com/document_detail/26092.html?spm=5176.2020520104.0.0.2b4b1450yqd1gg ...

    8. arguments简单函数 求整数递加和

      function add(n){if(n == 1) return 1;else return n + arguments.callee(n-1);alert(arguments.callee(1)) ...

    9. update Select 从查询的结果中更新表

      UPDATE tbl_a a INNER JOIN tbl_b b ON a.arg=b.argSET a.arg2=b.arg2 这个语法即可实现

    10. es4x 使用nodejs 开发vertx 应用框架试用

      es4x 是将vertx 的特性带到nodejs 的开发中,性能很不错,同时开发方式和nodejs 一样,可以加速vertx 应用的开发,同时也可以方便的集成java 软件包,提供的cli 工具也很方 ...