一个页面如果引用多个JS,或者像ASP.NET MVC,一个视图包含多个子视图,每个子视图有自己的JS,那么变量、函数的重名冲突机会将会大增。

如何解决?

这里有一个方案:

1、用类来封装子页的JS代码。

<script type="text/javascript">
var globalName = "左直拳";
var A = function(){
var name = "leftfist";
function hi(){//私有函数,外部无法访问
alert(name + " : Hi!");//私有变量,内部可以直接访问
}
this.hiGlobal = function(){
alert(globalName + " : Hello!");//全局变量,内部可以直接访问
}
this.sayHello = function(){//public函数,外部可访问
hi();//私有函数,内部可以直接访问
this.hiGlobal();//公有函数,内部访问也要加上 this.
}
}; var fa = new A();
</script>

<input type="button" id="btnHi" value="sayHi" onclick="fa.sayHello();" />

这种模式中,凡需要被外部访问,如HTML控件访问的,就定义成公有函数,其他的就是类内部的私有函数,冲突的机会将大大降低。

2、还有另外一种方式,就是将变量、函数封装到 JSON 对象里

var G = {
callback : function(){alert("callback!");}
,f1 : function(){
G.callback();
}
}
G.f1();

但是这种方式的话,里面的元素全部都是公有的,外部全都可以访问,固然解决了重名问题,但谈不上有所封装。这种方式,感觉就好像实现了接口的类一样。

并且里面的方法互相访问,同样要加上命名空间,麻烦了点。

版权声明:本文为博主原屙文章,喜欢你就担走。

JS重名解决方案的更多相关文章

  1. 关于js重名方法的先后调用问题

    当js中方法重名时,最后引入的js会覆盖前面的引入的js(就是说会调用最后引入的js中的方法)详情参照(main.js与white.js 的a())但是,当最后一个js中存在语法上的错误时(也可以是本 ...

  2. js重名的处理

    ### 关于重名的处理 > 在变量提升阶段,如果名字重复了,不会重新的进行声明,但是会重新的进行定义(后面赋的值会把前面赋的值给替换掉) ```javascript //=>变量提升:fn ...

  3. js方法入参或局部变量和全局变量重名,用来赋值全局变量会失败

    今天遇到个bug,最后终于知道原因了,js方法入参和全局变量重名,用入参赋值全局变量失败,就是说方法入参不能和全局变量重名. 现在下面的例子也说明,局部变量和全局变量不可以同名不光是入参,只要同名赋值 ...

  4. 在IE中,JS方法名和input的name重名时,调用该方法无效

    在IE中,JS方法名和input的name重名时,调用该方法无效.提示:网页错误详细信息 用户代理: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1 ...

  5. javascript js函数重名后面的覆盖前面的

    js 函数重名后面的覆盖前面的   var x = 1;    var y = 0;    var z = 0;    function add(n) { return n = n + 1; }    ...

  6. ie7,ie8 js中变量名和页面元素ID重名,报错

    js变量名和一个div的id重名,报错.不知所以然...做个标记

  7. HTML元素ID和JS方法名重复,JS调用失败

    HTML元素ID和JS方法名重复时,JS中的重名方法无法被找到,不能执行. 修改ID或者方法名,两者不一致即可.

  8. JS---函数名和变量名重名

    继续作用域的问题,今天上午看了一会,下午看又看到了一个类型的题,函数名和变量名相同的问题.之前还不会觉得函数名和变量名重名了会有什么冲突.也是没有去测试过..懒了.直接贴代码: 运行之后大家猜测结果是 ...

  9. 规避Javascript多人开发函数和变量重名问题

    函数和变量重名始终是一个令人头痛的问题,先讲变量吧,相信了解JS的朋友都知道,在JS中 是没有块级作用域的只有函数作用域,也就是说那些以大括号为界定符的代码块是管不住其中定义 的变量的作用域的,举例: ...

随机推荐

  1. tensorflow ConfigProto

    tf.ConfigProto一般用在创建session的时候.用来对session进行参数配置 with tf.Session(config = tf.ConfigProto(...),...)#tf ...

  2. js获取当前位置

    <!DOCTYPE html><html><head><meta name="viewport" content="initia ...

  3. 树莓派 -- 按键 (key)使用BCM2835 gpio library

    BCM2835 GPIO library介绍 This is a C library for Raspberry Pi (RPi). It provides access to GPIO and ot ...

  4. Volume 1. Big Number(uva)

    如用到bign类参见大整数加减乘除模板 424 - Integer Inquiry #include <iostream> #include <string> #include ...

  5. 每天学点Python之collections

    每天学点Python之collections 内容摘抄自:<python大法好>的每天学点Python之collections collections模块在内置数据类型(dict.list ...

  6. JavaScript学习---简易图片轮播

    效果如下: 图片定时轮播 点击左右控制显示下一张或上一张图片 index.html文件 <html> <head> <title> js编写实现幻灯片效果 < ...

  7. Linux学习笔记02

    1.文件处理命令:touch touch [文件目录][文件名] 如:touch /tmp/jiejie/jiejie.conf2.文件处理命令:cat cat 参数[文件目录][文件名]//显示文件 ...

  8. 2018/4/7 Mybatis源码结构概览

    在观看Mybatis源码的过程中,有一点疑惑,就是Mybatis的缓存设计明显有问题,首先,Mybatis缓存分为两级,先说一级,生命周期为一个sqlsession,只有在查询相同方法时才会命中缓存, ...

  9. 【BZOJ4872】分手是祝愿(期望DP)

    题意: B 君在玩一个游戏,这个游戏由 n 个灯和 n 个开关组成,给定这 n 个灯的初始状态,下标为 从 1 到 n 的正整数.每个灯有两个状态亮和灭,我们用 1 来表示这个灯是亮的,用 0 表示这 ...

  10. 显示锁ReentrantLock和Condition的使用

    一.ReentrantLock (1).java.util.concurrent.locks包中的ReentrantLock就是重入锁,它实现了Lock接口,Lock加锁和解锁都是显示的.Reentr ...