相信jser兄弟们肯定会碰到这样一个问题,

在做数组类的操作的时候,会要求删除数组中的一个元素;亦或是判断某值是否存在于这个数组;

OK,拿删除数组元素举例,扩展方法为:

Array.prototype.remove = function(val){var index = this.indexOf(val);if (index > -1) {this.splice(index, 1);}
}

很简单了扩展了一个删除元素的方法,那么我说的坑是什么呢?

在我们使用for··in 遍历对象的时候是把对象的可枚举属性都遍历了,!!!包括其原型链上的东东(坑!),下面看图说话:

一张图说明一切了对么?你以后每次使用for···in···进行遍历的时候都会保函在这里所扩展的remove方法,那么解决方案呢?

判断是否是它私有属性,如果不是就说明不是自己“亲生的”,直接break扔掉;

------------------------------------------------------------------------------------------

以上情况经常出现在字符串模板里面,就是给String扩展一个format方法,如下

String.prototype.format = function(args) {var result = this;if (arguments.length < 1) {return result;}var data = arguments; // 如果模板参数是数组if (arguments.length == 1 && typeof (args) == "object") {// 如果模板参数是对象data = args;}for ( var key in data) {if(!data.hasOwnProperty(key))break;var value = data[key];if (undefined != value) {result = result.replaceAll("\\{" + key + "\\}", value);}}return result;}

如果没有做处理的话,偶尔碰到莫名其妙的undefined会有点摸不着头脑~~~

转载于:https://www.cnblogs.com/AlexBlogs/p/6141220.html

在Array原型链上扩展remove,contain等方法所遇到的坑相关推荐

  1. 【js细节剖析】通过=操作符为对象添加新属性时,结果会受到原型链上的同名属性影响...

    在使用JavaScript的过程中,通过"="操作符为对象添加新属性是很常见的操作:obj.newProp = 'value';.但是,这个操作的结果实际上会受到原型链上的同名属性 ...

  2. [js] js怎样避免原型链上的对象共享?

    [js] js怎样避免原型链上的对象共享? 组合继承 优势 公有的写在原型 私有的卸载构造函数 可以向父类传递参数 劣势 需要手动绑定constructor 封装性一般 重复调用父类性能损耗

  3. 原型链上的__proto__和protoptype

    propotype 每一个函数都有一个propotype属性 propo 每一个实例对象都有一个_propo_,且指向对象的构造函数的propotype construct 每一个实例原型都有一个构造 ...

  4. 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 使用原型链和EventTrigger

    原型链是JS的必备,作为ECMAScript4,原型链也是支持的. 特别说明,ActionScript3是支持完整的面向对象继承支持的,原型链只在某些非常特殊的情况下使用. 本文旨在介绍如何使用原型链 ...

  5. 详解面向对象、构造函数、原型与原型链

    详解面向对象.构造函数.原型与原型链 为了帮助大家能够更加直观的学习和了解面向对象,我会用尽量简单易懂的描述来展示面向对象的相关知识.并且也准备了一些实用的例子帮助大家更加快速的掌握面向对象的真谛. ...

  6. Javascript原型链

    这是关于原型链的一系列的现象与原理的解释以及例子 [转载请注明出处与地址] 分成4个部分阐述: 1.如何创建一个对象 2.使用原型链prototype实现对象的继承. 3.原型链上属性和方法的联系与规 ...

  7. JavaScript原型和原型链(详细解读)

    原型和原型链 一.原型概述 1.概念 原型在JavaScript是一个很重要的概念,它是面向对象可以继承的基础.知道吗,JavaScript的设计模式就是原型模式(二十三个经典设计模式之一),正是因为 ...

  8. javascript对象、类与原型链

    js是一个基于对象的语言,所以本文研究一下js对象和类实现的过程和原理. 对象的属性及属性特性 下面是一个对象的各个部分: var person = {name: "Lily",a ...

  9. JS中关于构造函数、原型链、prototype、constructor、instanceof、__proto__属性

    在Javascript不存在类(Class)的概念,javascript中不是基于类的,而是通过构造函数(constructor)和原型链(prototype chains)实现的.但是在ES6中引入 ...

  10. JavaScript进阶学习(二)—— 基于原型链继承的js工具库的实现方法

    文章来源:小青年原创 发布时间:2016-07-03 关键词:JavaScript,原型链,jQuery类库 转载需标注本文原始地址: http://zhaomenghuan.github.io... ...

最新文章

  1. 人工智能技术映射出来的16个行业66个应用场景!
  2. CCNP视频教程下载全集
  3. el-button在表格操作行可以写成type=text'形式,这样有链接手型。
  4. [JVM]常用JVM工具使用
  5. 网络编程应用:基于TCP协议【实现对象传输】--练习
  6. 【数据分析】《唐探3》口碑急转直下?看看影迷们到底都说了些啥
  7. PHP增删查改性能优化
  8. 敏捷大观园 - 视频分享第6弹!
  9. Visual Studio 2008 SP1 和 net framework 3.5 新特性
  10. 常见的目标检测中的背景建模方法总结
  11. flask request传参
  12. python中trun是什么意思_Python 中 'unicodeescape' codec can't decode bytes in position XXX: trun错误解...
  13. 开机启动实际上有两种情形
  14. 平板波导 matlab,非对称平板波导色散曲线求解(附matlab程序).doc
  15. layabox 打印_Layabox 集成指南
  16. 北京外国语大学pip镜像站
  17. 秦俊东北计算机博士,秦 俊 教授-云南大学省部共建教育部自然资源药物化学重点实验室...
  18. 浏览器的作用不只是搜索、浏览网页,它还隐藏着这些功能
  19. 穿山甲广告切后台点Icon进入后广告消失或游戏重启的解决方法
  20. 深度学习车辆检测实现自动驾驶

热门文章

  1. java gson 解析json字符串_JSON 之GSON 解析
  2. 阶段1 语言基础+高级_1-3-Java语言高级_04-集合_02 泛型_3_定义和使用含有泛型的类...
  3. 数据库优化实践【信息跟踪篇】
  4. 事务复制中的msrepl_ccs
  5. 1.7 试探法(回溯法)
  6. 机器学习:LibSVM与weka在eclipse中的使用
  7. 互联网秒杀业务架构设计
  8. 压力测试中需要掌握的几个基本概念
  9. [转]ubuntu 终端常用命令
  10. asp .net 多文件上传(二)