2016-02-29 79 views
0

我想要做的事情非常簡單:我創建一個對象,或者更好我定義了一個實例化對象的函數,然後我有另一個函數讀取從文件中讀取數據並在讀取完成後得到回調。該函數被分配給對象的原型,所以它只創建一次,而不是每次創建它的新實例。在回調函數內部訪問實例變量

var fs = require('fs'); 

var CrazyObject = function() { 
    this.craziness = 'this is sooo crazy'; 
}; 

CrazyObject.prototype.crazyFunction = function (file) { 
    fs.readFile(file, function (err, result) { 
     // here i can't access the craziness! 
    }); 

    // but here i can 
}; 

exports.CrazyObject = CrazyObject; 

如上例所示,問題是在回調函數內我無法訪問創建對象時分配的變量。

+0

這是一個* *財產,而不是一個變量。 – Bergi

+0

好,因爲值可以改變它仍然是一個變量:)語義上講,當然。 –

回答

2

只是bind您的回調函數來正確的上下文:

fs.readFile(file, (function (err, result) { 
    console.log(this.craziness); 
}).bind(this)); 
+1

確實很微不足道。謝謝! –