Chrome, Javascript, JSON и __proto__ - где мои методы? - PullRequest
0 голосов
/ 26 сентября 2010

У меня есть функция:

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 Ответ

1 голос
/ 26 сентября 2010

Добавьте ваш 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));
};
.
...