2016-11-16 11 views
1

私は自分のページに含まれているjavascriptファイルを持っています。私が使用して、ページでJavascriptのネストされた関数「関数ではない」

var PageTransitions = (function() { 

    function setCurrent(currentSet) { 
     alert(currentSet); 
    } 

    function nextPage(options, direction, gotopage) { 
     //some working code, not important 
    } 

})(); 

:ここでの要点だ正常に動作します

PageTransitions.nextPage(x, x, x); 

を。しかし、

PageTransitions.setCurrent(x); 

を使用しようとすると、PageTransitions.setCurrentは、なぜこれが起こっているわからない機能

ではない私を与え、かなり確信して構文が正しいです。残念ながら、それは仕事のためのものであり、実際のページを共有することはできません。私たちの上級開発者が見ていたが、彼らはそれが動作する必要があるように見えたと彼らは言った。なぜこれが起こっているのだろうか? JavaScriptのファイルが呼び出された後、私はsetCurrentを呼んでいる

は、また確かにNEXTPAGE後にそれを動かしてみました。 nextPageはまだ動作しましたが、setCurrentはまだ関数ではありません。

はまたsetCurrent、それが渡されてい変数の名前を変更しようとしました。まだ良いことはありません。

+2

変数の値を設定する別のものがあります。表示されているコードでは、どちらの関数もIIFEの外部からアクセスできません。 – JJJ

+0

あなたはオブジェクトが必要なモジュールパターンと単純なIIFEを混同しているようです。 – Bergi

答えて

4

あなたが連鎖するつもりなら、あなたはプロパティ、別の関数内で定義されていないだけの機能が必要になります、最も簡単なのは、オブジェクトリテラル

var PageTransitions = { 
    setCurrent : function(currentSet) { 
     alert(currentSet); 
     return this; 
    }, 
    nextPage : function(options, direction, gotopage) { 
     //some working code, not important 
     return this; 
    } 
} 

PageTransitions.nextPage(x, x, x); 

や生命維持には、オブジェクトを返す、目的を持っている場合でありますリテラル

var PageTransitions = (function() { 
    function setCurrent(currentSet) { ... } 
    function nextPage(options, direction, gotopage) { ... } 

    return {setCurrent, nextPage}; 
})(); 
+0

それを釘付けにしました。ありがとう。 –

0

(function() { 
 

 
    function setCurrent(currentSet) { 
 
     alert(currentSet); 
 
    } 
 

 
    function nextPage(options, direction, gotopage) { 
 
     //some working code, not important 
 
    } 
 

 
    var o = {}; // Dummy object 
 

 
    // set properties to local functions 
 
    o.setCurrent = setCurrent; 
 
    o.nextPage = nextPage; 
 

 
    // Attach dummy to global namespace to make it available 
 
    window.PageTransitions= o; 
 

 
})(); 
 

 
// Now, you can access your functions via your namespace: 
 
PageTransitions.setCurrent("test"); 
 
PageTransitions.nextPage();

+1

'var PageTransitions'がうまく動作するとき、なぜ' window.PageTransitions'反パターンを使うのですか? – Bergi

+0

@Bergi私は 'var PageTransitions'が動作しないとは言いませんでした。私の答えはもっとはっきりしていると思います。また、その 'var'アプローチは、私の解決策ではない吊り上げの影響を受けやすいです。 –

+0

@Bergiまた、「varアプローチ」が同じ結果をもたらすときに私のアプローチをアンチパターンと呼ぶのはどうか不思議です。しかし、どちらのアプローチもGlobalを避けるために適応させることができます。 –

2

PageTransitions.nextPage(x, x, x);が機能している場合は、送信したコードが原因ではありません。

var PageTransitions = (function() { 

    function setCurrent(currentSet) { 
     alert(currentSet); 
    } 

    function nextPage(options, direction, gotopage) { 
     //some working code, not important 
    } 

    return { 
     setCurrent: setCurrent, 
     nextPage: nextPage 
    }; 
})(); 

今すぐ PageTransitions.setCurrentが定義されている:

あなたがそうPageTransitionsそれへのアクセス権を持つ関数を返す必要があります。

関連する問題