【问题标题】:Passing parameter to a module javascript将参数传递给模块javascript
【发布时间】:2013-07-18 19:31:23
【问题描述】:

我在 javascript 中使用模块模式。 它是一种创建“类”实例的方法吗? 我以正确的方式使用它?

var moduleClass = (function () {
var a =5;
return {
getA: function () {
  console.log(a);
 }
};
})();
var instance = moduleClass;
instance.getA();

http://jsfiddle.net/PzLKy/ 如何在新实例上传递参数?

【问题讨论】:

  • 如果您想在实例化时传递参数,请使用构造函数而不是文字。
  • 您的代码中不涉及类类结构。您只需使用模块模式生成一个单例。你想要什么 - 只有这样我们才能告诉你代码是正确的?
  • 我希望能够声明新实例并传递不同的值。我不想做一些我正在学习的具体事情。
  • a 是什么外壳?所有实例都将共享的静态变量?实例变量?通常你不需要模块模式来创建class-like structure in JavaScript

标签: javascript parameters module


【解决方案1】:

您在这里并不需要 new,以下是实现您想要实现的目标的正确编码方式。 另外,be really careful while using new, if used unwisely it can start clobbering your Global variable,如果你想使用 new,John Resig 对如何以正确的方式进行操作有一个非常好的解释,更多信息请阅读 John Resig 的这篇文章 http://ejohn.org/blog/simple-class-instantiation/

http://jsfiddle.net/PzLKy/2/

var moduleClass = (function () {
    var a =5;

  return {
      setA: function (inA) {
      a=inA;
    } ,
    getA: function () {
      alert(a);
    }

  };

})();


var instance = moduleClass;
instance.setA(8);
instance.getA();

编辑: contactmatt 是对的,绝对不要害怕使用构造函数,但是这里有一些你需要注意的事情

摘自第一段提到的 John Resig 的文章,

假设这是你的代码

function User(first, last){
    this.name = first + " " + last;
}

var user = new User("John", "Resig"); 
user.name // John Resig
var user2 = User ("first","last");
user2.name //undefined, also this would pollute your current scope

如果你调用构造函数,你不会得到任何指示,并且可能是调试的噩梦。

解决这个问题的方法是

function User(first, last){
  if ( this instanceof User ) {
    this.name = first + " " + last;
  } else
    return new User(first, last);
}

总结,

因此,如果您认为构造函数是解决问题的最佳方法,请使用它。但请注意,John 的简单类实例化也是一个非常有用的模式,尝试通过它,他还解释了泛型构造函数。

【讨论】:

    【解决方案2】:

    使用构造函数。不要害怕“新”,明智地使用它。

    注意:标准命名约定是用大写字母命名将用作函数构造函数的函数。 (即 ModuleClass 而不是 moduleClass)

    function ModuleClass() {
      var a =5;
      return {
        getA: function () {
        console.log(a);
       }
      };
    };
    

    或者,如果您有足够的勇气了解 JavaScript 中的“this”关键字。

    function ModuleClass() {
      var a =5;
      this.getA = function () {
        console.log(a);
      };
    };
    
    var instance = new moduleClass();
    instance.getA();
    

    【讨论】:

      【解决方案3】:

      要创建实例,您必须将关键字new 与任何函数一起使用。 这个函数又名 Constructor 可以帮助你创建多个实例

      var moduleClass = (function () {
      var a =5;
      return {
      getA: function () {
        console.log(a);
       }
      };
      })();
      var instance = new moduleClass;
      instance.getA();
      

      构造函数:构造函数与 new 关键字一起使用,它们是为对象提供原型的方式之一。

      REFER-->

      1. Javascript Prototypes,objects,constructor??i am confused
      2. Constructors in JavaScript objects

      【讨论】:

      • 你自己说过new必须与函数一起使用……
      • @MESSIAH:当我将答案中的代码粘贴到 devtools 中时,它仍然会引发类型错误...
      • 但我认为重要的是要了解构造函数的使用方式,尝试直接编写函数,即不将其存储在变量中。?contactmatt 以我认为的正确方式回答了它
      猜你喜欢
      • 1970-01-01
      • 2017-12-01
      • 2011-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-17
      相关资源
      最近更新 更多