首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >new MyFunction()与new(MyFunction)

new MyFunction()与new(MyFunction)
EN

Stack Overflow用户
提问于 2012-03-27 12:45:58
回答 3查看 1.1K关注 0票数 5

我正在查看Vows documentation,在一些地方它使用了以下语法

代码语言:javascript
运行
复制
var myVar = new(MyFunction);

例如:

代码语言:javascript
运行
复制
var promise = new(events.EventEmitter);

我熟悉new MyFunction()new MyFunction (是的,我读过this question)。但是,上面的语法对我来说是新的-它看起来像是一个函数调用,尽管我怀疑它只是new MyFunction加上了一些括号。这些使用new的方式有什么不同吗?如果不是,是否有好的理由使用其中之一?我本以为new MyFunction()是最易读的。

抱歉,如果这是一个副本-我搜索了,但没有找到它。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-27 13:05:08

它们看起来是一样的,只是在不同的地方加了括号,也许是在风格上,或者为了作者的清晰起见。以下内容完全相同:

代码语言:javascript
运行
复制
function Foo() { this.now = new Date(); }
var f1 = new Foo;
var f2 = (new Foo);
var f3 = new(Foo);
var f4 = new Foo();
var f5 = (new Foo());

请注意,下面的形式不同,因为"Foo“函数是直接调用的(由于括号的优先级),不返回任何内容(未定义),这是"new”运算符的无效参数(因为“未定义”不是函数):

代码语言:javascript
运行
复制
var x = new(Foo()); // TypeError: undefined is not a function
票数 4
EN

Stack Overflow用户

发布于 2012-03-27 12:56:55

如果

代码语言:javascript
运行
复制
var MyFunction = function(){
    alert("ok");
}

然后

代码语言:javascript
运行
复制
var myVar = new(MyFunction);

变成了

代码语言:javascript
运行
复制
var myVar = new(function(){
    alert("ok");
});

这只是一个组织代码的问题。

票数 4
EN

Stack Overflow用户

发布于 2012-03-27 14:16:45

您创建的示例是等价的,没有区别:new是一个运算符。在像这样的运算符周围找到括号并不少见:

代码语言:javascript
运行
复制
if (typeof(myvar) === "function")

或者也可以:

代码语言:javascript
运行
复制
return(myvar);

但它们是运算符,不需要括号。在这种情况下,我不喜欢它们,但这是个人喜好的问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9883495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档