2016-04-15 81 views
0

我總是在對象上聲明屬性,如果我知道我會在某些時候在我的代碼中使用它們(爲了幫助其他開發人員在調試過程中將新屬性添加到對象中時不會感到驚訝,並想知道它在哪裏或爲什麼被填充):在使用它們之前聲明屬性 - 最佳實踐?

var TestHelper = function(){ 
    var Test = function(){ 
     // Public: 
     this.a = null; // string 
     this.b = null; // number 
    } 

    // Public: 
    return { 
     /*Test*/ TestFunction: function(str, num){ 
      var test = new Test(); 
      test.a = s; 
      test.b = num; 

      return test; 
     } 
    } 
} 

我能找到它令人沮喪,當我遇到這樣的代碼:

var TestHelper = function(){ 
    var Test = {}; 

    // Public: 
    return { 
     /*Test*/ TestFunction: function(str, num){ 
      var test = new Test(); 
      test.a = s; 
      test.b = num; 

      return test; 
     } 
    } 
} 

或更難(失去的JavaScript類型這有助於調試)

var TestHelper = function(){ 
    // Public: 
    return { 
     /*{}*/ TestFunction: function(str, num){ 
      return { 
       a = s, 
       b = num 
      } 
     } 
    } 
} 

...因爲它使得僅僅有點難以完全理解原始開發人員的想法。

無視我看來,

  • 什麼是這個,爲什麼不同的想法?
  • 大團隊一般喜歡首先聲明屬性來幫助其他開發者,反之亦然?
  • 我在問正確的問題,還是有我缺少的另一點?
+0

有什麼密切的投票:)我會改正。 – Jimmyt1988

+0

在需要的地方聲明事物。把腳本分解成小函數,所以你可以像C一樣聲明它在頂部,C++有 –

+0

我還沒有投票支持-1,但是它的編碼基本適用於任何語言 –

回答

0

當然開發人員更喜歡記錄的東西,這對他們來說更容易。

Javascript中的一個很好的做法是避免未定義的值,因此對於這種情況,使用null值或空數組或空對象初始化對象會好得多。

但是你忘了你的最後一宗個案的事 - >此方法時可能是最好的:

function Test(str, num){ 
    this.a=str; 
    this.b=num; 
    return this; 
} 
Test.prototype.method = function(a){...}//adding method to the object Test 
var test = new Test("toto", 5); 
test.method(a);//executing method 
+0

所以你說你喜歡在使用之前聲明的屬性而不是動態賦值? – Jimmyt1988

+1

那麼在我的例子中,您只能選擇構造定義屬性的對象,這是在創建對象時可以獲得價值的最佳方法。但是讓我們假設你已經定義了第三個屬性,但是在實例化對象時你不能擁有他的值,那麼最好在構造函數中聲明它並用一個空值(或者陣列的空數組)對它進行初始化,然後分配價值可能在稍後時間。 – Walfrat