0

foo.js次のように呼び出すことができる関数を含むライブラリを作成しようとしていますfoo.bar:

<script src="foo.js"></script>
<script>
    baz = foo.bar();
</script>

私はこのライブラリを次のように書こうとしています:

foo = function() {
    foo.bar = function() {
        // code goes here
    }
}();

何が起こっているのか正確に理解しているとは言えませんが、これは他の場所で使用されているパターンです。これを使おうとするfooと、 を定義しようとすると、 が定義されていないと言われますfoo.bar。私は何が欠けていますか?

4

4 に答える 4

3

js-patterns については、この本を読んでください。

http://addyosmani.com/resources/essentialjsdesignpatterns/book/

その無料、そしてその素晴らしい!

dystroysの回答に触発されて、少し変更してこのように書きます

var foo = (function () {

  // your private stuff here

  return {
    bar: function () {}
  };

})();
于 2013-06-15T19:47:09.170 に答える
3

非常に多くのパターンが考えられるため、どのパターンが必要かを確認することは不可能です。

たとえば、これを行うことができます:

var foo = (function(foo) {
    // here you can also declare "private" non exported variables,
    //   including functions that could be used by bar
    foo.bar = function() {
        // code goes here
    }
    return foo;
})(foo||{});

これにより、存在が保証され、関数fooが に追加されます。以前に存在しない場合は、作成されます。以前に存在する場合は、単に拡張されています。barfoofoo

同じロジックを使用してサブモジュールを作成することができ、より理にかなっています。

于 2013-06-15T19:42:49.400 に答える
2

または、これを行うことができます:

var foo = {
           bar : function() {
               // code goes here
          }
};

しかし、それはオブジェクトリテラルですが、それでも呼び出すことができますfoo.bar()

于 2013-06-15T19:43:44.473 に答える