2016-04-14 4 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

これらの関数は匿名関数内のプライベートローカルシンボルです。どのような状況下でも、それらは暗黙的にオブジェクトプロパティとして表示されません。あなたはあなたが返す 'OfflineStorage'関数のプロパティとして* getArticlesByArtNoを明示的に*可視にすることができます。 – Pointy

+0

いいえ、これまでにはうまくいきませんでした。以前は 'OfflineStorage.prototype.getArticlesByArtNo = function ... 'があったでしょう。 – Bergi

+0

この関数をコンストラクタ内に配置することもできます。 'this.getArticlesByArtNo = function(params)....' –

答えて

-1

あなたは、このように外部からアクセスしたい機能を返却する必要があります。

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

より良いデパートターゲットがあります。それはOPが表示したコールでは機能しません – Bergi

関連する問題