2013-11-20 36 views
0

我在與得到這個的jsfiddle工作問題:修改環狀函數的參數在Javascript

http://jsfiddle.net/y45jN/

var mainFunction = function() { 
    this.text; 
} 

mainFunction.prototype.start = function(printText) { 

    this.text = printText; 

    var func = function() { 
    document.getElementById('test').innerHTML += this.text + '<br/>'; 
    }; 

    setInterval(func,1000); 

} 

mainFunction.prototype.updateText = function(printText) { 

    this.text = printText; 

} 

var test = new mainFunction(); 
test.start('hello'); 

setTimeout(function(){ 
    test.updateText('bye'); 
},5000); 

我想要做的是前5秒的打印您好, 5秒後打印再見。

我對我怎樣才能使功能(FUNC)不確定知道類的this.text參數已經改變。

+0

使用的setTimeout與綁定https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind – rafaelcastrocouto

回答

0

你在這裏搞砸的上下文。緩存this在一些變量,並使用它的時間間隔內(或使用bind):

this.text = printText; 
    var self = this; 

    var func = function() { 
     document.getElementById('test').innerHTML += self.text + '<br/>'; 
    }; 

然後,只需修改實例的屬性text

setTimeout(function(){ 
    test.text = 'bye'; 
},5000); 

Fiddle

+0

太謝謝你了!我一直在掙扎與此一整個晚上,直到我放棄了,來到計算器! – San1ty

+0

還有一個問題,javascript綁定是如何工作的,但是underscorejs綁定不起作用「_.bind(func,{text:this.text})」 – San1ty

+0

在這種情況下,您正在推送完全不同的對象作爲上下文。只需使用'_.bind(FUNC,這一點)' –

0

解使用綁定方法:

setInterval(func.bind(this),1000); 

http://jsfiddle.net/y45jN/5/

+1

謝謝,兩種解決方案都非常棒! – San1ty

+0

還有一個問題,javascript綁定如何工作,但underscorejs綁定不起作用「_.bind(func,{text:this.text})」 – San1ty

+0

它返回函數(它不運行它,只是返回功能本身),但funtion裏面,所有的「這個」將指向綁定使用的參數。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind – rafaelcastrocouto