2

簡単な例があります:

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変数にファイルの内容を追加したい。どうやってするの ?

4

3 に答える 3

5
  • ローカル変数を作成し、そこに「this」を保存します

    読み取り: function() { var _file = this; fs.readFile(this.name, function (err, data) { ... _file.text = data; ... }); }、

  • 「this」を内部関数にバインド: read: function() {

     fs.readFile(this.name, function (err, data) {
         ...
         this.text = data;
         ...
     }.bind(this)
    

    }、

注: データを this.text に保存するだけでは不十分です: yur クラスで何かを非同期的に読み取る場合は、コールバックを提供して、yourFile.text にデータを取得したことを他のオブジェクトに知らせる必要があります。

于 2012-06-11T22:12:23.270 に答える
4

thisクロージャーの外側への参照を保存し、それを内側から参照できます。

File.prototype = {
    read: function() {
        var self = this;
        fs.readFile(this.name, function (err, data) {
            self.text = data;
        });
    },
    getContent: function() {
        return this.text
    }
}
于 2012-06-11T22:03:42.520 に答える
0

できることがいくつかあります。

  1. スコープバージョンを作成しますthis

    File.prototype = {
      read: function() {
        var self = this;
        fs.readFile(this.name, function (err, data) {
          self.text += data;
        });
      }
    };
    
  2. 関数を現在の値にバインドしますthis

    File.prototype = {
      read: function() {
        fs.readFile(this.name, function (err, data) {
          this.text += data;
        }.bind(this));
      }
    };
    
于 2012-06-11T22:04:25.153 に答える