我正在查看Vows documentation,在一些地方它使用了以下语法
var myVar = new(MyFunction);例如:
var promise = new(events.EventEmitter);我熟悉new MyFunction()和new MyFunction (是的,我读过this question)。但是,上面的语法对我来说是新的-它看起来像是一个函数调用,尽管我怀疑它只是new MyFunction加上了一些括号。这些使用new的方式有什么不同吗?如果不是,是否有好的理由使用其中之一?我本以为new MyFunction()是最易读的。
抱歉,如果这是一个副本-我搜索了,但没有找到它。
发布于 2012-03-27 13:05:08
它们看起来是一样的,只是在不同的地方加了括号,也许是在风格上,或者为了作者的清晰起见。以下内容完全相同:
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”运算符的无效参数(因为“未定义”不是函数):
var x = new(Foo()); // TypeError: undefined is not a function发布于 2012-03-27 12:56:55
如果
var MyFunction = function(){
alert("ok");
}然后
var myVar = new(MyFunction);变成了
var myVar = new(function(){
alert("ok");
});这只是一个组织代码的问题。
发布于 2012-03-27 14:16:45
您创建的示例是等价的,没有区别:new是一个运算符。在像这样的运算符周围找到括号并不少见:
if (typeof(myvar) === "function")或者也可以:
return(myvar);但它们是运算符,不需要括号。在这种情况下,我不喜欢它们,但这是个人喜好的问题。
https://stackoverflow.com/questions/9883495
复制相似问题