2010-11-19 18 views
0

Merhaba çocuklar ben bir değer döndürür fonksiyonu var, nesne değişmezi desen kullanarak bazı kod yazıyorum: O zaman başka bir işlevden değişkeni 'cL' güncellemeniz gerekirDeğişim var

'currentLocation': function() { 
    var cL = 0; 
    return cL; 
    }, 

böyle:

teamStatus.currentLocation() = teamStatus.currentLocation() + teamStatus.scrollDistance(); 

Bu kısım başka fonksiyonun parçasıdır - ancak bir hata geri almak belirten: geçersiz atama sol taraftaki ben de değişken güncelleştiremezsiniz tahmin ediyorum

Bu şekilde, herkes daha iyi bir yöntem önerebilir veya doğru yönde bana işaret edebilir.

Herhangi bir yardım büyük memnuniyetle karşılanacaktır. Yapmak ne çalışıyorum vurgulamak için daha fazla kod eklemek için gidiyor

:

'currentLocation': function() { 
    var cL = 0; 
    return cL; 
    }, 
'increaseTable': function() { 
    if (teamStatus.currentLocation() <= teamStatus.teamStatusTableHeight()) { 
     teamStatus.currentLocation = teamStatus.currentLocation() + teamStatus.scrollDistance(); 
     $("#tableTrackActual").animate({scrollTop: (teamStatus.currentLocation)}); 
     $("#tableMembers").animate({scrollTop: (teamStatus.currentLocation) }); 
     //console.log(teamStatus.currentLocation()); 
     teamStatus.buttonRevealer(); 
    } 
} 

Eğer increaseTable currentLocation değerini güncellemek gerektiğini görebileceğiniz gibi - bu ben başarmak için çalışıyorum ne fazla ışık tutuyor yardımcı olur.

cevap

0

İşlevinizin içindeki değişken, bu işleve (ve içinde tanımlanan tüm işlevlere) tamamen özeldir. Bir dizi özel değişkenleri paylaşan bir dizi işlev oluşturmanız gerekiyorsa, bunu bir kapatma ile yapabilirsiniz. Mesela: O ne yapar

var Thing = (function() { 
    var thingWideData; 

    function getData() { 
     return thingWideData; 
    } 

    function setData(newData) { 
     thingWideData = newData; 
    } 

    return { 
     getData: getData, 
     setData: setData 
    }; 

})(); 

anonim kapatılması içerdiği tamamen özelthingWideData değişkeni olsun bunun için mevcut getData ve setData işlevlere sahip bir Thing nesnesi oluşturmak ve kümesidir. Bu model hakkında daha fazla here ve here hakkında daha fazla bilgi, ancak bunların özel verileri özel verilerden daha özel yöntemlerle ilgilidir.

1

teamStatus.currentLocation işlevini çağıran ve dönüş değerine atamayı deneyen teamStatus.currentLocation() = yazıyorsunuz. Bu geçerli değil. Sadece teamStatus.currentLocation = istiyorsun - işlev çağrısı yok. kodunuzu üretir Ne

+0

Alkışlar Chuck haklı olduğunuzu düşünerek hızlı bir test yaptı, sonra cevabınızı doğru olarak işaretleyecektir. Siz rock grubu – jonnyhitek

+0

+ 1 iow.do -> 'currentLocation': 0 – BGerrissen

0

geçerli:

0 = 0 + <some number> 

Hangi değişken güncellemek istiyorsunuz? cL? Bunu fonksiyonda beyan ediyorsunuz, dışarıdan bir değer atayamazsınız. Kodunuzun geri kalanında bağlı olarak, getters and setters ile daha iyi olabilir:

var object = { 
    _cL = 0, 
    get currentLocation() { 
     return this._cL; 
    }, 
    set currentLocation(value) { 
     this._cL = value; 
    } 
} 

o zaman yapabilirsiniz:

teamStatus.currentLocation = teamStatus.currentLocation + teamStatus.scrollDistance(); 

Güncelleme: IE İlişkin

: Eğer currentLocation aslında should sadece bir sayı olması, yalnızca mülk olarak bildirilmesi yeterli olabilir:

var obj = { 
    currentLocation: 0 
} 
+0

not: IE6-8 alıcı/ayarlayıcıları desteklemiyor. – BGerrissen

+0

Merhaba currentLocation sadece bir değer olmalı ama ben – jonnyhitek

+0

@ jonathan p değerini güncelleyebilmem gerekiyor: O zaman bunu bir işlev olmak yerine bir sayı olarak bildirebilirsiniz :) (güncellemede gösterildiği gibi). –