正确定义一个对象

时间:2014-02-03 14:13:51

标签: javascript

我一直在研究一个JS项目,在安装JSHint以保持我的JS排队之前从未参与过正确的JS项目。这导致我查看“使用严格”定义,这导致我阅读有关匿名函数的内容。现在我真的很困惑。我不知道如何正确定义我的对象。

我决定查看一些公共js库(主要是Bootstrap),了解它们的工作方式。

这是我看到的一般模式:

(function($) {
    'use strict';

    var MyObject = function() {
        // ...
    }

    // Prototype methods
})(jQuery);

我的问题是外部脚本如何看到对象?我希望能够从初始化程序传递对象两个ID。

2 个答案:

答案 0 :(得分:1)

这是一个IIFE(立即调用函数表达式)。

它故意不创建全局变量。它用于保持命名空间的清洁。它还将$变量(定义为jQuery)作为参数传递,以便它可以访问jQuery,而无需引入可能使用用户可能正在实现的$符号的任何其他库。

我认为您可能希望更多地了解构造函数/模块/原型继承模式,并对使用IIFE的原因进行一些研究(它们对哪些情况有利/不利)。

如果你想使用IIFE并拥有一个传递参数的函数,或者从内部定义参数变量(不会污染命名空间),你可以在IIFE内部进行。

脱离我的头顶例子:

(function(){
    var Foo = function(arg){
  };
  Foo.prototype.something = function(){
    do something;
  };
  var Bar = function(){
    do something;
    return arg;
  };
  var baz = new Foo(bar());
  baz.run();
  //or
  var ex = something you want to pass as an arg;
  var baz = new Foo(ex);
  baz.run();
})();

答案 1 :(得分:0)

您可以按以下方式导出MyObject

  (function(window){
     var MyObject = function....
     MyObject.prototype. something...
     window.MyObject=MyObject;
  }(window));

更多关于构造函数,原型和继承的信息:https://stackoverflow.com/a/16063711/1641941