一個頁面如果引用多個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" οnclick="fa.sayHello();" />
這種模式中,凡需要被外部通路,如HTML控件通路的,就定義成公有函數,其他的就是類内部的私有函數,沖突的機會将大大降低。
2、還有另外一種方式,就是将變量、函數封裝到 JSON 對象裡
var G = {
callback : function(){alert("callback!");}
,f1 : function(){
G.callback();
}
}
G.f1();