0

indexeddb オブジェクトとの接続でメイン コードから再利用するクラスを JavaScript で作成したいと考えています。私が今持っているものは次のとおりです。

function DATABASE() {
    this.DB_NAME = 'MYdatabase';
    this.DB_VERSION = 1;
    this.db = null;
    this.results = null;
}

DATABASE.prototype.open = function(callback) {
    var req = indexedDB.open(this.DB_NAME, this.DB_VERSION);

    req.onsuccess = function (evt) {
        this.db = this.result;
        callback();
    };

    req.onerror = function (evt) {
        console.error("openDb:", evt.target.errorCode);
    };

    req.onupgradeneeded = function (evt) {
        console.log("openDb.onupgradeneeded");        
    };
}

ここでの問題は、onsuccess が実行されると、メイン クラスのスコープが失われることです。これは私が期待したものではありません。どうすれば探していることを実行できますか? これと同時に、次のようないくつかの接続を作成したいと思います。

var DB = new DATABASE();
DB.open(function(res){});

var DB2 = new DATABASE();
DB2.open(function(res){});

var DB3 = new DATABASE();
DB3.open(function(res){});

本当にありがとう。

4

4 に答える 4

1

スコープが変更されるたびに、次のように追加して使用しますvar reqvar self = this;

self.db = self.result;
于 2013-09-27T10:30:43.017 に答える
0

これはうまくいきますか?open 関数をプロトタイプではなく DATABASE 内に配置します。

function DATABASE() {
  var _this=this;
  _this.DB_NAME = 'MYdatabase';
  _this.DB_VERSION = 1;
  _this.db = null;
  _this.results = null;

  _this.open = unction(callback) {
    var req = indexedDB.open(_this.DB_NAME, _this.DB_VERSION);

    req.onsuccess = function (evt) {
      _this.db = _this.result;
      callback();
    };

    req.onerror = function (evt) {
      console.error("openDb:", evt.target.errorCode);
    };

    req.onupgradeneeded = function (evt) {
      console.log("openDb.onupgradeneeded");        
    };
  }
}
于 2013-09-27T10:30:36.077 に答える
0
var that = this
req.onsuccess = function (evt) {
    that.db = that.result;
    callback();
};

また、この記事を読むことをお勧めします: Scope and this in JavaScript

于 2013-09-27T10:34:52.950 に答える