function(){}在分配给变量时的含义

时间:2016-02-08 15:47:12

标签: javascript node.js

我知道函数是javascript中的对象,并且可以将这些函数分配给变量。我也知道这个问题:How does the (function() {})() construct work and why do people use it?

但我想知道在这种情况下它究竟意味着什么: https://github.com/zsolt/retwis-nodejs/blob/master/domain.js#L43

User = function(){}

这一行之后是"假设"的一些成员函数(方法?)的声明。 User对象。 在SO中似乎没有其他解释的答案。

2 个答案:

答案 0 :(得分:7)

这意味着User是一个不接受输入,没有副作用并且不返回任何内容的函数。

很可能是类构造函数,稍后会添加方法。 User.foo = function() { /* ... */}意味着一个静态方法,所以如果您习惯于在Java体系结构中思考,那么这更像是一个实用程序类。

你应该在Javascript中查找伪古典继承。与Java类似,代码将 static 方法添加到User ,而不是对象。

我仍然相信代码遵循Java类模式,因为编写者更喜欢User是可以实例化的构造函数,具有静态方法,并且没有实例方法(我看到),在具有属性的对象上。你是对的,这是迂回的,但如果他们是Java开发人员,那就是作者会做的事情。它确实具有以下优点:实例方法可能会稍后添加到User ,而客户端代码影响很小,但我看不到User会发生这种情况(我没有看起来很长。)

顺便说一下,我推断出这是因为函数的CapitalizedNames意味着它应该在Javascript工程中使用new调用,这意味着它是一个类。弄清楚为什么一个类可能更可取仅仅与Java经验有关。

答案 1 :(得分:0)

在Javascript中创建对象的规范方法是:

function user(config) { this.config = config; ... } User = new user(config);

它使用this上下文(和概念)。如果要创建命名属性和/或方法,则使用此格式。

如果您不需要创建this上下文,则可以使用以下内容:

User = function(){}

这里的构造函数是匿名的,不会创建任何上下文。出于同样的原因,不需要new关键字。