2013-07-18 141 views
8

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

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

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

+0

如果您想在实例化时传递参数,请使用构造函数而不是文字。 – dandavis

+0

代码中没有涉及类的构造。你只需要用模块模式生成一个单例。你想要什么* - 只有这样我们才能告诉你代码是正确的? – Bergi

+0

我希望能够声明新的实例并传递不同的值。 我不想做特定的事情,我只是在学习。 – Petran

回答

-1

对于创建实例,您必须使用关键字new以及任何函数。 此功能也称为构造可以帮助您创建多个实例

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
+0

你说你自己''new'必须和**函数**一起使用... ... – Bergi

+0

你在发布之前是否尝试过你的代码? – dandavis

+0

哦,我只是完全错过了小提琴......现在通过它! –

7

你并不真正需要的是新来的,下面是一个代码来实现你想实现什么是正确的方式。 此外,be really careful while using new, if used unwisely it can start clobbering your Global variable,如果你想使用新的,约翰Resig的有如何做到这一点的正确方法,通过约翰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的简单类实例化也是一种非常有用的模式,试图通过它,他还解释了泛型构造函数。

0

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

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

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

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

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

var instance = new moduleClass(); 
instance.getA();