2013-03-10 54 views
1

我一次又一次遇到的問題之一是對指針變化的參考this。以下面的例子。我想創建一個Server對象,並將相機的分辨率存儲爲屬性。這是不可能的,因爲this.resolution適用於相機回調對象中的屬性而不是服務器對象。解決方案「this」引用更改內部回調?

function Server(options) { 
    this.settings = options.settings; 
    this.camera = options.camera; 

    // Grab camera resolution 
    this.camera.getImageResolution(function(err, data) { 
     this.resolution = data; 
    }); 
} 

Server.prototype.start = function() { 
    console.log(this.resolution); // This outputs an undefined variable error 
} 

在過去,我圍繞着這一重命名thisself臨時調用函數的工作。當我存儲一個值時,這不起作用。我需要通過this進入回調,我顯然不能這樣做。

此外,我不能使用apply,因爲這將不允許camera.getImageResolution調用自己的方法。

解決此問題的最佳途徑是什麼?如果我的問題含糊不清,請要求澄清。

+0

爲什麼你需要將'this'傳入回調函數?如果你在外部範圍聲明'self',你仍然可以在回調中引用它。你也可以使用'bind'來創建一個特定接收者的回調。 – pdoherty926 2013-03-10 00:23:14

+0

@ethagnawl我需要將'this'傳入回調函數,因爲上面的代碼是異步運行的。對不起,離開了。 – gluxon 2013-03-10 00:26:58

+0

沒錯,我可以在'getImageResolution'中訪問'self',但是我怎樣才能將'self'的值放回'this'? – gluxon 2013-03-10 00:34:52

回答

2
function Server(options) { 
    var self = this; 

    self.settings = options.settings; 
    self.camera = options.camera; 

    // Grab camera resolution 
    this.camera.getImageResolution(function(err, data) { 
     self.resolution = data; 
    }); 
} 

Server.prototype.start = function() { 
    return this.resolution; 
} 

var server = new Server({options: {...}, settings: {...}}); 
server.camera.getImageResolution(); 
// after getImageResolution's asynch method has completed 
server.start() // === data parameter from getImageResolution's asynch method callback 
+0

太好了,但是我怎麼用另一種方法訪問'self.resolution'呢? – gluxon 2013-03-10 00:45:14

+0

'return this.resolution'給出未定義。 「這個」永遠不會被賦予「自我」的值。 – gluxon 2013-03-10 00:55:44

+1

您的代碼必須存在其他一些問題。你會看到一個基於我的解決方案在這裏工作的人爲例子:http://jsfiddle.net/ZBfLt/1/ – pdoherty926 2013-03-10 01:01:20

相關問題