11

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

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

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

4

3 回答 3

13

您在这里并不需要 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 的简单类实例化也是一个非常有用的模式,尝试通过它,他还解释了泛型构造函数。

于 2013-07-18T19:44:18.797 回答
0

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

注意:标准命名约定是用大写字母命名将用作函数构造函数的函数。(即 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();
于 2013-07-18T19:55:03.027 回答
-1

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

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

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

参考-->

  1. Javascript原型,对象,构造函数??我很困惑
  2. JavaScript 对象中的构造函数
于 2013-07-18T19:36:18.147 回答