严格模式下的对象

时间:2014-02-10 22:28:50

标签: javascript jquery

我有一个对象,我需要它来运行页面的内容。我需要用严格模式包装它。我试图让它在全球范围内使用,但它没有解决我的问题。

(function($) {
   "use strict";

   var MyObj = {
       // some code here.
   }

   return MyObj;

})(jQuery);

console.log(MyObj); // <= undefined

如何从项目的任何位置访问此对象?

2 个答案:

答案 0 :(得分:4)

你所拥有的是immediately-invoked function expression (IIFE),它专门用于将事物与外部范围分开。由于您正在返回MyObj,因此您需要做的就是在全球范围内提供此功能:

var MyObj = (function($) {
    "use strict";

    var MyObj = {
        // some code here.
    }

    return MyObj;

})(jQuery);

console.log(MyObj);

另一种方法是将MyObj明确地放在全局空间中。在浏览器中,全局对象称为window,因此您可以在IIFE中说window.MyObj = { /* some code here */ }。不过,我会劝阻这种方法,因为外界观察者并不清楚这种情况是否发生(即你必须依赖文件)。更好的方法是返回要公开的对象,调用者可以选择将它们放在全局空间中。

答案 1 :(得分:1)

使用use strict,您只能将Object明确地放入int全局命名空间中。 例如,您可以在函数中使用window.myObj = MyObj

实现目标的另一种可能方法是将全局对象传递给您的函数(它可以是浏览器中的窗口,也可以是nodejs中的全局对象)。

(function($, global) {
   "use strict";
   var MyObj = {}
   global.myObj = MyObj;
})(jQuery, window);

此外,正如Ethan建议的那样,既然你返回MyObj,你可以简单地将调用的结果赋给变量。

var myObj = (function($) {
   "use strict";
   var MyObj = {}
   return x
})(jQuery);
myObj; //now defined in the global scope