2013-05-16 81 views
2

這是一種將屬性分配給對象的有效方法嗎?我有一個if/else語句,我希望它確定哪些屬性是這是一種將屬性分配給對象的有效方法嗎?

function game(){ 
    var self = this; 

    this.determineDifficulty = function(){ 
     var difSet = document.getElementById("dif"); 
     var chosen = difSet.options[difSet.selectedIndex].value; 

     if(chosen === "Easy"){ 
      var d = 0; 
      self.p = 1; 
      self.i = 1000; 
     }else if(chosen === "Medium"){ 
      var d = 1; 
      self.p = 0.1; 
      self.i = 100; 
     }else{ 
      var d = 2; 
      self.p = 0.01; 
      self.i = 10; 
     } 
     return d; 
    } 
} 

var myGame = new game(); 

如果我提醒myGame.p,它給了我正確的值。但這是一個好習慣嗎?據我所知,如果我想要一個變量,我可以在多個方法中使用 - 我應該將其分配爲該對象的屬性。另一種選擇是返回這是一個常規變量。如果這是正確的?

+0

這取決於 - 您分配給'this'(或'self',在您的示例中)的任何內容都可公開訪問,就像您使用'myGame.p'顯示的一樣。你可以在「遊戲」函數中聲明「私人」的變量 - 這意味着函數內的任何東西都可以訪問/更改它們,但是你不能超越「遊戲」。 – Ian

回答

1

您可以使用determineDifficulty中的this引用來執行對象屬性分配,而不是使用副本變量。請注意,這是因爲您將determineDifficulty作爲遊戲的對象屬性。如果您將其聲明爲'game()'內的內聯函數,那麼this將引用內聯函數,而不是遊戲。

請注意,它是,但是,所有構造函數大寫的良好做法。所以它應該是function Game()function game()

編輯:

正如我所說的,直接分配屬性值的對象,你可以這樣做。但是,如果您將determineDifficulty設置爲回調函數,那麼this將不會引用您需要的對象。

//For Example: 

function Obj() { 
    this.foo = 5; 
    this.set_foo = function() {this.foo = 10; } 
} 

var obj = new Obj(); 
alert(this.foo); //5 
obj.set_foo(); 
alert(this.foo); //10 

//The Following will not work 
element.onclick = obj.set_foo; 

當點擊元件,this將指元件和不obj

+0

'this'是指我的內聯函數,所以我需要確定一個屬性是否有困難?但這是一種方法,而不是一種財產?我在這裏有點困惑。 –

+0

'this.determineDifficulty = function()...'給你的遊戲對象一個名爲determineDifficulty的屬性,它的值是'='右邊的函數。在'myGame.determineDifficulty()'的函數體的執行過程中'this'將引用myGame。 – waldol1

+0

我明白了,非常感謝您的幫助。 :) –

相關問題