JS命名空间
命名冲突
全局变量会绑定到 window 上,不同的javascript文件如果使用了相同的全局变量,或者定义了相同名字就的顶层函数,都会造成命名冲突,并且很难被发现。
减少冲突的一个办法,把自己的所有变量和函数全部绑定到一个全局变量中:
<script type="text/javascript">
var MYAPP = {}; // 定义全局唯一的变量MYAPP MYAPP.name = 'haha'; // 定义自己的变量 // 定义自己的方法
MYAPP.foo = function() {
return 'Foo';
}; // 调用方法
ret = MYAPP.foo();
alert(ret);
alert(MYAPP.name); </script>
说明:
这里我们将变量和方法封存在 全局唯一变量 MYAPP中,在调用其中的属性和方法的时候,必须加上唯一变量名。
这样即使内部属性和方法同名,只要前面的唯一变量名不同名,都能正常执行,不回存在命名冲突。
解决方法验证
当我们将属性和方法封存在全局 唯一变量 中,然后外面直接调用:
<script type="text/javascript">
var MYAPP = {}; // 定义全局唯一的变量MYAPP MYAPP.name = 'haha'; // 定义自己的变量 // 定义自己的方法
MYAPP.foo = function() {
return 'Foo';
}; // 调用方法
ret = foo();
console.log(ret); // 报错 r = name;
console.log(r); // 报错 </script>
方法
说明:
结果报错!
定义两个全局唯一变量,然后里面属性和方法同名,通过全局唯一变量名进行调用:
<script type="text/javascript">
// 定义全局唯一的变量MYVAR01,并定义自己的属性和方法
var MYVAR01 = {
name: 'xxx', foo: function() {
return 'xxxx';
},
}; // 定义全局唯一的变量MYVAR02,并定义自己的属性和方法
var MYVAR02 = {
name: 'ooo', foo: function() {
return 'oooo';
}
}; // 调用MYVAR01的方法
r1 = MYVAR01.name;
console.log(r1);
r2 = MYVAR01.foo();
console.log(r2); // 调用MYAVAR02的方法
r3 = MYVAR02.name;
console.log(r3);
r4 = MYVAR02.foo();
console.log(r4); </script>
方法
结果:
xxx
xxxx
ooo
oooo
注意:
在变量中写方法和在变量外面写方法,方式是不一样的。注意区分写法。
JS命名空间的更多相关文章
- js命名空间笔记
在量比较大或者多人编写的情况下,命名冲突就很有可能发生,同一个页面引用了两个命名相同功能不同的文件,调用的时候就会出问题.因此使用JS命名空间很重要. 1.采用字面量方法创建命名空间: var a={ ...
- js命名空间的使用
js命名空间的使用: test.html 代码如下: <!DOCTYPE HTML><html lang="en-US"><head> & ...
- 浅谈js命名空间管理
在C# 和 Java里面我们如果想使用哪一个功能类就要引用相应的命名空间. 如C#里面有个System.Web.UI库,我们就要用using System.Web.UI;,之后我们就可以用到Scr ...
- 深入剖析js命名空间函数namespace
在看阿里员工写的开源数据库连接池的druid的源代码时,发现了其中在jquery的原代码中又定义了一个命名空间的函数:$.namespace(),其代码如下: 网址为:https://github.c ...
- 第一课:js命名空间的介绍,js对象的扩展以及js数组化
1.命名空间: js里面的命名空间就是使用对象的属性来扩展的.比如,用户定义一个A对象,A对象下面有B属性和C属性,同时B属性和C属性又是对象.因此A={B:{},C:{}},这时用户就可以在B对象和 ...
- JS命名空间模式解析
简介 在SF上看到这样一个提问: 如题,因为不得已的原因,需要写若干个全局函数.但又不想这样: window.a = function(){} window.b = function(){} wind ...
- 使用js命名空间进行模块式开发
在java中,为了防止命名冲突和模块式开发,会有个一个import 关键字来进行导包. 在js中为了达到同样的效果,我们也通过给其自定义一个“包”的概念. 直接上代码: 首先有个LC.js文件: // ...
- JS 命名空间 实现方式 收集
一. 对象注册式 // 声明一个全局对象Namespace,用来注册命名空间Namespace = new Object(); // 全局对象仅仅存在register函数,参数为名称空间全路径,如&q ...
- jQuery事件命名空间多事件绑定自定义事件js 命名空间 javascript命名空间
http://blog.csdn.net/pigpigpig4587/article/details/24727791 jQuery事件命名空间 jQuery支持事件命名空间,以方便事件管理.例如,在 ...
- js命名空间写法
很早知道这种写法,由于基础面向对象不够扎实一直在回避,但是面对整站这种方法还是有必要会 <div id="div1">111</div> <div i ...
随机推荐
- ArcGIS Engine开发之TocControl
TocControl控件简介 TocControl控件的主要作用是显示当前加载的图层有哪些.采用什么样的符号等,目的是使用户对当前加载的数据有一个总体的把握.与之相关联的伙伴控件有:MapContro ...
- View and Data API Tips : Conversion between DbId and node
By Daniel Du In View and Data client side API, The assets in the Autodesk Viewer have an object tree ...
- iOS网络1——NSURLConnection使用详解
原文在此 一.整体介绍 NSURLConnection是苹果提供的原生网络访问类,但是苹果很快会将其废弃,且由NSURLSession(iOS7以后)来替代.目前使用最广泛的第三方网络框架AFNetw ...
- swift-分支
swift相当于OC的比较 if后的括号可以省略 if后只能接bool值 if后的大括号不能省略 let num1 = 5.0 let num2 = 4.0 let boo :Bool = true ...
- Unity3D安卓出包报错
今天又遇到了在安卓出包时,直接报错了两个错误,报错信息分别如下: Installation failed with the following output: pkg: /data/local/tmp ...
- 用户代理字符串识别工具源码与slf4j日志使用
User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本.CPU 类型.浏览器及版本.浏览器渲染引擎.浏览器语言.浏览器插件等.UA也成为了, ...
- http参数的封装(后台接受参数的场景)
场景 不管是任何web框架作为一个web的开发人员必须要搞明白control层如何接受各种参数. 下面就根据我们公司的系统架构(nutz)来进行一下场景描述.各位小伙伴也可以根据这些 场景自己去总结一 ...
- MySQL可视化软件Work Bench导出导入数据库
首先打开你的work bench,输入你的密码进入主页面 A:导入数据库 在Schemas空白处右键选择Create~:建立一个数据库,然后就可以导入你的sql文件了 File-->Open S ...
- 梳理delegate相关概念
一.前言 可能项目规模较小,项目中除了增删改查就只剩下业务流程,以前都没怎么弄明白的东西时间长了就越发的模糊了... 二.使用场景 MSDN:delegate 是一种可用于封装命名或匿名方法的引用类型 ...
- JDWP Agent
JDWP Agent Implementation Description Revision History Disclaimer 1. About this Document 1.1 Purpose ...