2016-03-01 17 views
2

我試圖尋找我的問題的答案,但我開始認爲,鑑於缺乏結果,我顯然不正確地表達問題。考慮到這一點,如果這篇文章的標題有誤導性,我很抱歉,但我仍然非常瞭解。Javascript模塊模式訪問更新的參數值

我有我的代碼下面

VAR TESTDATA =簡化版本[「一」,「B」]

var addReceiver = (function() { 
     dataReceiver = function (dataInput) { 
      t = this 
      t.data = dataInput; 
      console.log(t.data); 
      t.interval = setInterval(function() { 
       t.update(); 
      }, 1000); 
      t.stopUpdate = function() { clearInterval(t.interval); }; 
      t.update = function() { 
       //t.data = dataInput; 
       console.log(t.data); 
      }; 
     }; 
    })() 

    var testLogger = new dataReceiver(testData); 
</script> 

,我希望效仿的行爲是,當我鍵入到控制檯

testData = ['c','d','e'] 

爲testLogger登錄數組[ 'C', 'd', 'E']每秒,而不是[ '一', 'b']。

我可以改變

t.data = dataInput to t.data = testData 

實現這一點,但是這顯然是毫無意義的,要不然我創建dataReceiver的每一個新實例將有相同的數據輸入的參考。

所以,我的問題是,我將如何更改代碼以提供testLogger可擴展(或任何dataReceiver實例)訪問其局部範圍之外的變量?

回答

2

使用您所創建的,而不是訪問全局變量object

var testLogger = new dataReceiver(testData); 
testLogger.data = [1,2,3,4]; 

現在,您將能夠打印新注入的數據。我的意思是setInterval將打印更新的值。

+0

是的,理論上這是一個選項。但我可能有3個變量,它們將testData作爲輸入,第4個變量使用另一個變量,例如'var testLogger1 = new dataReceiver(testData); var testLogger2 = new dataReceiver(testData); var testLogger3 = new dataReceiver(testData); var testLogger4 = new dataReceiver(otherData);'在這種情況下,按照您的建議進行更新並不實際。傳遞給testData的數據通過websocket傳遞,並可以在任何時候更新,當它發生時,我希望testLogger在下次刷新時使用這些更新的值。那有意義嗎? – cb1210

+0

@ cb1210爲此,我建議您將這些對象保存在數組中,並且每當必須更改該值時,都需要迭代該數組並逐個更改對象的屬性值。 –

+0

好吧,那麼答案是我不能,但我可能會添加一些邏輯到websocket onmessage事件監聽器,如果我能以某種方式獲得當前使用該websocket作爲他們的dataInput的對象的列表?感謝您的幫助。 – cb1210