2014-02-25 81 views
0

我是javascript noob,所以我不明白爲什麼在下面的代碼作者使用Avengers.cast而不是復仇者?Javascript點運算符

var myApp = angular.module('myApp', []); 
    myApp.factory('Avengers', function() { 
     var Avengers = {}; 
     Avengers.cast = [{ 
      name: "Robert Downey Jr.", 
      character: "Tony Stark/Iron Man" 
     }]; 
     return Avengers; 
    }) 


function AvengersCtrl($scope, Avengers) { 
    $scope.avengers = Avengers; 
} 
+2

他正在對象'復仇者「上設置屬性'cast'。它可以使用相同的符號進行訪問。 –

+0

@ lethal-guitar:那麼還有一個問題,爲什麼將它設置在屬性而不是變量上...... –

+4

顯然是設計決定 - 復仇者對象將來可能會擁有更多屬性,而不僅僅是鑄造 – doodeec

回答

1
var Avengers = {}; 

這意味着:創建一個新的對象,並通過可變復仇者

Avengers.cast = [{ 
     name: "Robert Downey Jr.", 
     character: "Tony Stark/Iron Man" 
    }]; 

這意味着引用它:剛纔創建的對象有一個名爲cast屬性。這是一個數組,只包含一個對象(帶有兩個帶有字符串值的屬性)。

+0

那麼爲什麼要聲明var復仇者= {};和Avengers.cast當代碼似乎工作相同,當我刪除var復仇者= {};並將Avengers.cast更改爲復仇者?非常感謝你的回答! – tharderer

0

在您的代碼中,cast屬性Avengers被設置爲特定對象。比方說,最初Avengers沒有價值。在製造部分,Avengers成爲

Avengers.cast = [{ 
    name: "Robert Downey Jr.", 
    character: "Tony Stark/Iron Man" 
}]; 

你可以使用這個地方在你的代碼一樣console.log(Avengers.cast)。以下爲該功能的示例;

myApp.factory('Avengers', function() { 
    return { 
     helloWorld: function() { 
      return "Hello, World!" 
     } 
    }; 
}); 

您可以在代碼的某處使用Avengers.helloWorld()

作爲總結,您可以使用angular.js工廠創建對象併爲該對象設置屬性,並在該對象中創建函數。請參閱here以獲取更多詳細信息

0

要回答您的具體問題:有多種方法可以傳遞信息。

作者本可以讓Avengers服務只是數組而不是數組。

所以這個選擇有點武斷,因爲你似乎正在接受。

這就是說,如果作者正在計劃擴展Avengers服務的更多屬性,那麼這就是爲什麼選擇了具有數組的對象。

雖然如果你只是要這樣做,你應該檢查constant - 也許它會比factory更合適。