我有一个简单的例子:
function File(name) {
this.name = name
this.text = null
}
File.prototype = {
read: function() {
fs.readFile(this.name, function (err, data) {
}
},
getContent: function() {
return this.text
}
}
var myfile = new File('my_file')
watch.createMonitor('my_file_dir', function (monitor) {
monitor.files['my_file']
monitor.on("change", function (f, stat) {
myfile.read()
}
})
main program....:
myfile.getContent() ...
我想在this.text变量中添加文件内容。怎么做?
答案 0 :(得分:5)
创建局部变量并存储'this'
读:function(){ var _file = this; fs.readFile(this.name,function(err,data){ ... _file.text = data; ... }); },
将'this'绑定到内部函数: 读:function(){
fs.readFile(this.name, function (err, data) {
...
this.text = data;
...
}.bind(this)
},
注意: 将数据存储到this.text是不够的:如果您在yur类中异步读取某些内容,则需要提供回调以让其他对象知道您在yourFile.text中获得了一些数据
答案 1 :(得分:4)
您可以在闭包之外保存对this
的引用,并从内部引用它:
File.prototype = {
read: function() {
var self = this;
fs.readFile(this.name, function (err, data) {
self.text = data;
});
},
getContent: function() {
return this.text
}
}
答案 2 :(得分:0)
你可以做几件事:
创建this
的范围版本:
File.prototype = {
read: function() {
var self = this;
fs.readFile(this.name, function (err, data) {
self.text += data;
});
}
};
将函数绑定到当前值this
:
File.prototype = {
read: function() {
fs.readFile(this.name, function (err, data) {
this.text += data;
}.bind(this));
}
};