Javascript面向对象之命名空间问题
来源:互联网 发布:手机上怎样装修淘宝 编辑:程序博客网 时间:2024/05/22 13:26
在Javascript中,数组是对象,函数是对象,正则表达式也是对象,当然对象也是对象。对象是属性的容器,它适用于收集和管理数据,对象也可以用于包含其他对象,所以它可以很容易的表示成树型和图型结构。Javascript面向对象中为了防止类名冲突(相同的类名只要属于不同的命名空间,便不会冲突),引入了“命名空间”这一概念。
对象声明时,还要避开那些关键词和保留字。如:我写了一个对象,声明如下
对象声明时,还要避开那些关键词和保留字。如:我写了一个对象,声明如下
var caches = {moduleId:'',queryParams:{ search: '', taskName: ''} }
在chrome39版本中,通过caches.queryParams.search = "erbin";可以正常赋值;但是在高版本chrome浏览器中,caches.queryParams.search = "erbin", 在控制台抛出“keyword: search is undefined”的异常。起初并没有想到是命名空间的问题。但想到chrome39是可以的,那就考虑到可能高版本中,使用了caches对象。果不其然,我在chrome45版本的控制台输入caches, 才发现原来被CacheStorage占用了(可控的离线缓存,它用来存储response对象的,也就是说用来对HTTP响应做缓存的。在浏览器中的引用名叫caches而不是驼峰写法的CacheStorage)。既然说到了caches, 就在简单说下它吧,由于该技术的规范没有稳定,可能在未来的版本中会有所变化。浏览器兼容情况:
还是接着说对象命名问题,示例如下:
var o = { name: "erbin", address: { addr: "x",addr2: 'xx' }, toString: function(){}};// 如果命名一样会被覆盖var o = { sex: 12}function foreach(obj){ for(var i in obj){if(obj.hasOwnProperty(i)){ // 只对key有效console.log("have:"+i);} }}foreach(o);console.log("-----------------------");foreach(caches.constructor.prototype)console.log("-----------------------");// 浏览器自带的对象,不会被覆盖,原因类定义方式不同var caches = { keyword: "12", queryParams: { moduleId: '',searchName: '' }, taskName: '0'};foreach(caches);caches.keyword = "erbin" //上面声明的keyword无效console.log(caches.keyword)//caches.queryParames.moduleId = "0006" // 报moduleId is undefined错误caches.queryParames = {moduleId: '0006'}console.log("queryParams.moduleId ="+caches.queryParames.moduleId);console.log("------------------------------");// 浏览器自带对象,只能添加方法,不能删除方法caches.constructor.prototype.add = function(){ console.log("add"); }
综合上面的例子, 自定义的对象是可以改变里面的属性和方法的;而浏览器自带的对象可能做了一些特殊处理,不可以删除属性和方法,但可以增加方法。因此,为了避免由于对象定义导致命名空间带来的问题,声明对象时,尽量加上自己业务私有名字。
阅读全文
0 0
- Javascript面向对象之命名空间问题
- 面向对象之命名空间
- javascript面向对象与命名空间-简单示例
- JavaScript之命名空间
- js面向对象编程:命名空间
- js面向对象编程:命名空间
- c#面向对象(二)----命名空间
- 面向对象的命名空间总结
- JavaScript之命名空间模式
- 黑马程序员 自学20C#面向对象之命名空间与String
- javascript 之面向对象
- JavaScript之面向对象
- javascript之面向对象
- Javascript之面向对象
- JavaScript之面向对象
- 面向对象进阶 01 对象、类、属性,方法、命名空间
- 第一章.对象导论之基本概念[面向对象/问题空间/解空间]
- xfire 参数对象 命名空间的问题
- python3.6——print函数
- bzoj1096 [ZJOI2007]仓库建设
- 定时器和多线程的区别和联系
- 2017面试总结
- Java 并发 ---ThreadLocal源码分析
- Javascript面向对象之命名空间问题
- bzoj2456 mode
- 169. Majority Element (divide and conquer)
- 杨辉三角(pascal's triangle)
- python教程1-4 控制流语句: If
- bzoj1208 [HNOI2004]宠物收养所
- JAVA类的加载,链接,初始化总结
- 的发光飞碟发到,的风格的申达股份
- 一些提示