0

好的,当谈到 JavaScript 范围函数和模块模式时,我肯定学到了很多东西,很棒的东西!现在我正在教自己以这种方式将 jQuery 传递给一个作用域函数,它加载得更快,如果由于某种原因我有另一个使用 $ 的框架,就不会有混淆。

但是我不完全理解的是,当我想传入 jQuery 时,何时“在范围函数的上下文中”创建一个“新”实例。这就是我的意思...如果我打算使用以下作为基础,它将返回 pubs,它可以与函数或属性等相关联,我明白了。

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 开发者工具得到一个错误。它说“对象不是函数”或类似的东西。但是如果我这样直接调用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对象别名为$,并且您返回的 afunction可以以您想要的方式使用。

于 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 回答