2016-04-14 5 views
0

Почему я не могу получить доступ к «внутренним» функциям этого объекта? Я чувствую, что это сработало раньше.Объекты Javascript, такие как функции

var OfflineStorage = (function() { 

    function OfflineStorage() { 
     var db = new Dexie("OfflineStorage"); 
     db.version(1).stores({ 
      articles: "ArtNo,Description,Unit" 
     }); 
    } 

    function getArticlesByArtNo(params) { 
     var regex = new RegExp(params.search, "i"); 

     return db.articles 
      .filter(function (article) { regex.test(article.ArtNo) }) 
      .toArray(); 
    } 

    return OfflineStorage; 

})(); 

И когда я пытаюсь получить доступ к этому объекту, например, я получаю сообщение об ошибке.

var offlinestorage = new OfflineStorage(); 
offlinestorage.getArticlesByArtNo(); <-- This throws an error 'is not a function' 
+0

Эти функции являются частные локальные символы внутри анонимной функции. В любом случае они не могут быть явно видны как свойства объекта. Вы можете * явно * сделать 'getArticlesByArtNo' видимым, назначив его как свойство возвращаемой функции' OfflineStorage'. – Pointy

+0

Нет, это не сработало. У вас, вероятно, раньше была функция «OfflineStorage.prototype.getArticlesByArtNo = function ...». – Bergi

+0

вы также можете поместить функцию внутри конструктора. 'this.getArticlesByArtNo = function (params) ....' –

ответ

-1

Вы должны вернуть функции, которые вы хотите получить доступ снаружи, как это:

return {OfflineStorage:OfflineStorage, getArticlesByArtNo:getArticlesByArtNo}; 
+2

Это не работает для вызова, показанного OP – Bergi

Смежные вопросы