寄生构造函数——扩展原生数组
最近在产品研发过程中,发现需要对原生数组进行一些扩展,我们深知修改原生对象的弊端,尤其在产品化的程序中修改原生对象的原型。如果因某个实现中缺少某个方法,就在原生对象的原型中添加这个方法,那么当在另一个支持该方法的实现中运行代码时,就可能会导致命名冲突。而且,这样做也可能会意外地重写原生方法,大名鼎鼎的prototype框架败因也在于此,改写了大量原生对象,当ECMAscript升级时,面临着许多改写方法与原生方法重名的问题,因此要不断地更改这些原有的扩展名称,导致一系列附带问题的出现。工作中对于这样的问题我采用了“寄生构造函数模式”对原生数组进行了扩展,虽然这种方法大家都不怎么使用,但是处理这种类型的问题,只有这种方式才最有效。如果采用传统的组合构造函数和原型模式,无形中也就犯了在原生对象上进行扩展的毛病,修改了原生数组。寄生构造函数模式到底是一种什么样子的呢?[javascript]var myArray = function () {//创建一个新对象var arr = [];//获得某值的索引值arr.indexOf = function (item) {for (var i = 0, len = arr.length; i < len; i++) {if (arr[i] === item) {return i;}}return -1;};//检查某值是否在数组中arr.hasItem = function (item) {return arr.indexOf(item) !== -1;};//不允许插入数组中已有的值,这里也可以传入一个数组arr.append = function (aItem) {function _push(aItem) {var aExt = [];for (var i = 0, l = aItem.length; i < l; i++) {if (!arr.hasItem(aItem[i])) {arr.push(aItem[i]);} else {aExt.push(aItem[i]);}}if (aExt.length > 0) {alert(aExt.toString() + ' has in Array!');aExt = null;}};if ($.isArray(aItem)) {_push(aItem);} else {_push(arguments);}return arr;};//移除某值,或某个数组arr.remove = function (aItem) {function _splice(a) {for (var i = 0, l = a.length; i < l; i++) {var item = a[i];if (arr.hasItem(item)) {return arr.splice(arr.indexOf(item), 1);}}};if ($.isArray(aItem)) {_splice(aItem);} else {_splice(arguments);}return arr;};//清空数组arr.clearAll = function () {arr.length = 0;return arr;};//在某个索引处插入某值arr.insert = function (target, indexPos) {var len = arguments.length;if (len == 2) {var arg = arguments[0];if (!arr.hasItem(arg)) {arr.splice(arguments[1], 0, arg);} else {alert(arg + ' has in Array!');}补充:web前端 , JavaScript ,
上一个:nodejs笔记2——请求路由
下一个:字符串中找出连续最长的数字串
- 更多JAVA疑问解答:
- java怎么在线读取ftp服务器上的文件内容
- 关于程序员的职业规划
- HTML和JSP矛盾吗?
- java小程序如何打包?
- java怎么split路径文件名?
- jsp+javaBean中Column 'ordersPrice' specified twice的错误
- Java TCP/IP Socket网络编程系列
- 大家来讨论一下我到底该用什么好?Swing 还是 JavaFX
- 关于Hibernate实体自身多对一的抓取问题
- 关于apache2+tomcat群集出现的问题
- spring 获取上下文问题
- SSH 导入导出excel 谁有这块的资料吗?
- Ext TreePanel 刷新问题
- springmvc 加载一个jsp页面执行多个方法 报404
- checkbox数组action怎么向页面传值