2010-08-23 45 views
1

看起來像一個簡單的問題,但無法使其工作。JavaScript類 - 在私有方法中訪問public var時遇到問題

在下面的示例中,取消選擇被調用,但公共變量'this.backSelected'未定義。如果我將unselect方法的代碼直接移入public off方法,它就可以工作。

如何檢查私有方法中的公共變量?我不明白爲什麼這不是工作。

謝謝。

function MyClass() 
{ 
    // public vars 
    this.isActive = false; 
    this.backSelected = false; 

    // public methods 
    this.on = function() { 
     this.isActive = true; 
     this.backSelected = true; 
     // set back button on image 
    } 

    this.off = function() { 
     this.isActive = false; 
     unselect(); 
    } 

    // private methods 
    function unselect() { 
     if(this.backSelected) { 
      // set back button off image 
     } 
    }; 


} 

var obj = new MyClass(); obj.on(); obj.off();

回答

5

您並未在上下文中調用unselect,因此this並不意味着您認爲它的含義。

unselect.apply(this); 
+0

認爲這是現貨。 請參閱「特權」部分以供參考:http://www.crockford.com/javascript/private.html – Gary 2010-08-23 17:20:55

+0

謝謝!從未見過之前的應用方法。 @加里 - 感謝您的鏈接,以及很棒的閱讀。 – 2010-08-23 17:34:30