2012-03-22 80 views
1

現在我已經使用了對象文字來代替我的代碼中的多個var語句。這裏有一個典型的例子:js使用對象文字var替換

(function(){ 
    var replaceVars = {}; 
    function x(){ 
    replaceVars.num=886; 
} 
    function y(){ 
    x(); 
    replaceVars.cal = replaceVars.num*99; 
    return replaceVars.cal; 
    } 
})(); 

所以我的問題是:這有什麼問題嗎?我的意思是我可以看到的是:1)在我的整個代碼中只有一個var語句。 2)在閉包內所有的孩子都可以訪問它(這意味着替換變量的屬性在閉包的範圍內變成全局的,就像在真正的全局對象(窗口)內創建一個類似全局的子對象(閉包)一樣)3)我可以預先定義準備馬上去屬性:

VAR replaceVars = { something1: 「一些價值」, something2: 「其他值」 }

所以任何人都可以想到的我的做事方式有什麼缺點?

+1

你爲什麼這樣做?到底是什麼? – jbabey 2012-03-22 19:04:20

+0

JavaScript中有多個'var'語句。只要確保它們都發生在它們使用的函數的頂部。 – zzzzBov 2012-03-22 19:05:41

+0

很久以前第一次使用jsLint,它抱怨太多的變量,我開始這樣做,它只是卡在我身上。再加上它似乎比立刻聲明你所有的變量更加整潔:var x,y,z,count chocula; – zero 2012-03-22 19:10:31

回答

1

我不認爲有任何東西錯誤與使用容器對象。雖然,我會成爲一個習慣,它宣告所需相關代碼的變量:

var replaceVars = { 
    num: null, 
    cal: null 
}; 

不過,話又說回來,這個作品,以及:

(function() { 
    var num, cal; 

    function x(){ 
    num = 886; 
    } 

    function y(){ 
    x(); 
    cal = num * 99; 
    return cal; 
    } 
})(); 
+0

嗯...是在手前宣佈的屬性只是一個良好的做法或有沒有它的記憶/速度明智嗎? – zero 2012-03-22 19:25:50

+0

@codewombat這僅僅是爲了你自己,提供關於下面的代碼的線索。因此,您不必遍歷所有代碼來確定正在使用哪些屬性。 – 2012-03-22 19:28:39

0

我不知道你想做什麼,但如果你只是想隱藏另一個對象,例如內的對象,讓他們通過方法只能訪問,我會做這樣的:

var objects = (function() { 
    var x = 42; 
    var y = 12; 

    var container = {}; 
    container.getX = function getX() { 
    return x; 
    } 
    container.getY = function getY() { 
    return y; 
    } 
    container.getSum = function getSum() { 
    return x + y; 
    } 

    return container; 
})(); 

這在我看來很容易閱讀。

+0

現在閱讀原始問題下的評論,我懷疑我的答案是你在找什麼...;) – TomTasche 2012-03-22 19:21:17