2016-04-14 1 views
0

Pourquoi ne puis-je pas accéder aux fonctions "internes" de cet objet? Je me sens comme cela a fonctionné avant.Objets Javascript comme les fonctions

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; 

})(); 

Et lorsque j'essaie d'accéder à cet objet comme ça, j'obtiens une erreur.

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

Ces fonctions sont des symboles locaux privés dans la fonction anonyme. Ceux-ci ne sont pas implicitement rendus visibles en tant que propriétés d'objet en aucune circonstance. Vous pouvez * explicitement * rendre 'getArticlesByArtNo' visible en l'affectant comme une propriété de la fonction' OfflineStorage' que vous renvoyez. – Pointy

+0

Non, cela n'a pas fonctionné avant. Vous avez probablement eu un 'OfflineStorage.prototype.getArticlesByArtNo = fonction ...' précédemment. – Bergi

+0

vous pouvez également mettre la fonction à l'intérieur du constructeur. 'this.getArticlesByArtNo = fonction (params) ....' –

Répondre

-1

Vous devez retourner les fonctions que vous souhaitez accéder à l'extérieur comme celui-ci:

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

Cela ne fonctionne pas pour l'appel que l'OP a montré – Bergi