博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS框架设计之对象扩展一种子模块
阅读量:5291 次
发布时间:2019-06-14

本文共 1320 字,大约阅读时间需要 4 分钟。

对象扩展

说完了,对象的创建(框架的命名空间的创建)以及如何解决多库之间的命名空间冲突问题之后,接下来,就是要扩展我们的对象,来对框架进行扩展,我们需要一种新功能,将新添加的功能整合到我们定义的对象中去。这种类型的方法在Javascript中常被称为extend和mixin。在Javascript对象属性特性没有诞生之前,我们可以随意的添加、修改、删除其属性的,因此扩展一个对象十分的简单。一个简单的代码扩展方法如下:

Title

 

这个方法在旧版本的IE中存在bug,因为它认为Object的原型方法就不该被遍历出来,因此for in循环是无法遍历名为valueof 和 toString的属性名的属性名,这导致后来模拟实现Object.Keys()也遇到了困难。下面这个方法主要用于获取对象的属性,给那些在(js引擎没有实现Object.Keys)的浏览器中获取对象的属性用的

Title

 mass的对象扩展方法

var zc={};function extend(target,source){    //将arguements转换成数组对象    var args=[].slice.call(arguments); //slice如果不传递参数,则默认截取所有的参数    var i=1;//控制用户参数传入的开始遍历的位置    var key;    //arguements的最后一个参数,决定是不是要对重复的参数进行复写,并规定最后一个参数只能是boolean    var ride=typeof args[args.length-1]=="boolean"?args.pop():true;//获取最后一个参数,如果不是bool值默认为true    //当传入参数只有一个时候    if(args.length===1){        target=!this.window?this:{};    }    //从第二个参数开始遍历(因为第一个参数是,要追加属性的对象),一直遍历到最后一个参数,知道source=undefined时,结束遍历    while ((source=args[i++])){        for(key in source)        {            //如果复写,或者当前属性在target对象中不存在            if(ride || !(key in target))            {                //将属性写入到对象中                target[key]=source[key];            }        }    }    return target;}    extend(zc,{version:"1.0.0",name:"zcJsHelper"},{other:"other"},true,true);    alert(zc.other);

 

转载于:https://www.cnblogs.com/GreenLeaves/p/6410328.html

你可能感兴趣的文章
[从jQuery看JavaScript]-匿名函数与闭包(Anonymous Function and Closure)【转】
查看>>
VisualStudio 常用快捷键-整理
查看>>
netty研究【1】:编译源代码
查看>>
GTK接口定义和实现
查看>>
Hadoop生态系统介绍
查看>>
uva 11468 Substring
查看>>
SoapUI、Jmeter、Postman三种接口测试工具的比较分析
查看>>
Android平台实现与Apache Tomcat服务器数据交互(MySql数据库)
查看>>
Cout vs printf---缓存与引用,流处理顺序(转ithzhang,知乎郝译钧)
查看>>
排座椅(seat)
查看>>
XOR Queries
查看>>
MSIL学习------从HelloWorld开始
查看>>
bzoj千题计划138:bzoj1432: [ZJOI2009]Function
查看>>
自建数据源(RSO2)、及数据源增强
查看>>
BootStrap2学习日记2--将固定布局换成响应式布局
查看>>
实现自己的脚本语言ngscript之四:代码生成
查看>>
在Android中使用FlatBuffers(上篇)
查看>>
.net 基础面试题二
查看>>
leetcode 347. Top K Frequent Elements
查看>>
nil、Nil、NULL和NSNull的理解
查看>>