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

要求如下:

重写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. linux中find命令的使用详解(转载)

      常用命令 find  (目录)   [-type d | f]  (文件夹 | 文件)   -name   (名称,可使用正则表达式) find  /root  -name "*core&q ...

    2. fastadmin CMS等系列插件安装不成功的问题

      由于fastadmin开发者  没有做到权限优化问题,导致用户在linux服务器上lnmp环境下安装的fastadmin后台安装插件一直产生权限不足,安装不成功的问题, 再次给大家一个具体解决办法 对 ...

    3. MySQL数据物理备份之lvm快照

      使用lvm快照实现物理备份 优点: 几乎是热备(创建快照前把表上锁,创建完后立即释放) 支持所有存储引擎 备份速度快 无需使用昂贵的商业软件(它是操作系统级别的) 缺点: 可能需要跨部门协调(使用操作 ...

    4. HTTP中分块编码(Transfer-Encoding: chunked)

      转自: 妙音天女--分块传输编码~ 参考链接: HTTP MDN--HTTP协议 一.背景: 持续连接的问题:对于非持续连接,浏览器可以通过连接是否关闭来界定请求或响应实体的边界:而对于持续连接,这种 ...

    5. 微软源码站点-C#编程指南

      地址:https://referencesource.microsoft.com/#System.Web/HttpPostedFile.cs 微软的源码可以在这里看. ---------------- ...

    6. python 和 R 中的整数序列

      python 中的 range() 函数是很常用的,R  中相应的函数是 seq(), 其实,R 中的“ :”也能代替 python 中的 range() 函数. 1.生成升序整数序列 python: ...

    7. django 基础进阶ORM COOKIE

      ORM: class Book(models.Model): title=models.CharFiled(max_length=32) 类-----------------表    #  Book- ...

    8. PHP将图片转base64格式函数

      base64的好处是什么?今天在跟小伙伴讨论这个问题,要是全站用Php把图片转为base64行不行? 1. 提升性能: 网页上的每一个图片,都是需要消耗一个 http 请求下载而来的, 图片的下载始终 ...

    9. 修改MyEclipse/Eclipse左侧文字大小(MacOS/Windows)

      一.Windows 首先找到 Eclipse/MyEclipse 的安装目录,然后找到如下目录: \plugins\org.eclipse.ui.themes_1.1.200.v20160815-05 ...

    10. ORA-01950:对表空间“”XXXX”无权限,解决办法

      上图报错 解决方案比如你要在用户(或SCHEMA)usera中建表,那么你用SYSTEM登录ORACLE后,执行如下SQL : ALTER USER 用户名 QUOTA UNLIMITED ON 表空 ...