好的我在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();
...然后一切正常。这里发生了什么?为什么我不能创建一个新的实例变量?
提前感谢您帮助我变得更聪明!
答案 0 :(得分:5)
查看您的return
声明。您将返回如下所示的对象:
{"dosomething": function () { }}
您无法创建对象的新实例。您可以直接调用dosomething
,因为它是返回的对象的直接属性(方法)。
我想你想要这样的东西:
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
,可以按照您想要的方式使用。
答案 1 :(得分: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>