Chrome,Javascript,JSON和__proto__ - 我的方法在哪里?

时间:2010-09-26 04:35:20

标签: javascript prototype google-chrome-extension

我有一个功能:

function createOrLoadDB (host) {                          
  var db = JSON.parse( window.localStorage.getItem(host) )
  if ( db == null ) {                                     
    db = new InitDB(host)                                 
  }                                                       
  else {                                                  
    db.__proto__ = InitDB.prototype                       
  }                                                       
  return db                                               
}                                                         

这对我来说似乎会起作用,但当我打电话给db.flushDB()时,我得到了

TypeError: Object #<an InitDB> has no method 'flushDB'

这很有趣,因为我的对象def中有这个:

function InitDB ( host ) {
    ... stuff
    this.flushDB = function () {                                      
      window.localStorage.setItem( this.host, JSON.stringify( this ) )
    }                                                                 
    ... stuff
}

我,我错过了什么。 __proto__让它说#<an InitDB>,但它仍然没有采用方法......

1 个答案:

答案 0 :(得分:1)

将您的flushDB方法添加到InitDB.protoype。否则,该方法将仅出现在InitDB显式创建的对象中。

这样的东西
function InitDB(host) {
    // the init stuff here, minus this.flushDB
}

InitDB.prototype.flushDB = function() {
    window.localStorage.setItem(this.host, JSON.stringify(this));
};