0

JavaScriptスコープ関数とモジュールパターンに関しては、間違いなく多くのことを学んでいます。素晴らしいことです! 今、私は jQuery をスコープ関数に渡すように自分自身に教えています。この方法でロードするとすぐにロードされます。何らかの理由で $ を使用する別のフレームワークがあったとしても、混乱はありません。

しかし、私が完全に理解していないのは、jQuery を渡したいときに「スコープ関数のコンテキストで」「新しい」インスタンスをいつ作成するかということです。これが私が言いたいことです...以下をベースとして使用する場合、関数やプロパティなどに関連付けることができるパブが返されます。

var DemoA = (function($) {
var pubs = {};
pubs.dosomething = //some function that calculates cool stuff with help of jquery
return pubs;
})(jQuery);

今、新しいインスタンスを作成しようとすると....

var stuff = new DemoA();

...Google Chrome Developer Tools でエラーが発生します。「オブジェクトは関数ではありません」またはその趣旨の何かと書かれています。しかし、このように DemoA を直接呼び出すと...

DemoA.dosomething();

...その後、すべて正常に動作します。ここで何が起こっているのですか?新しいインスタンス変数を作成できないのはなぜですか?

私が賢くなるのを手伝ってくれてありがとう!

4

2 に答える 2

5

あなたのreturn発言を見てください。次のようなオブジェクトを返しています。

{"dosomething": function () { }}

オブジェクトの新しいインスタンスを作成することはできません。返されたオブジェクトdosomethingの直接のプロパティ (メソッド) であるため、直接呼び出すことができます。

私はあなたがこのようなものが欲しいと思います:

http://jsfiddle.net/veJqg/

var DemoA = (function($) {
    var pubs = function () {
        this.dosomething = function () {
            console.log("just executed `dosomething`");
        };
    };
    return pubs;
})(jQuery);

var a = new DemoA();
a.dosomething();

jQueryこのように、オブジェクトを として引き続きエイリアスし、必要な方法で使用できる$を返します。function

于 2012-10-18T22:40:36.737 に答える
0

一般的に使用されるもう少し複雑な jQuery の例:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
(function($) {

  $.DemoA = function(element, options) {
    var pubs = {};
    return pubs;
  }

  $.fn.DemoA = function(options) {
     return this.each(function() {
       (new $.DemoA($(this), options));
     });
   };

})(jQuery);

var i = new $.DemoA(item, {});
var j = $('<div>').DemoA();
</script>
于 2012-10-18T22:53:27.037 に答える