JavaScript-函数构造函数在没有';新';关键词

JavaScript-函数构造函数在没有';新';关键词,javascript,function,oop,constructor,new-operator,Javascript,Function,Oop,Constructor,New Operator,我们都知道,不使用“new”关键字调用JavaScript构造函数是不好的。 那么,这是为什么: Function("a", "b", "return a + b")(1, 1); // returns "2" 返回与此相同的值?: new Function("a", "b", "return a + b")(1, 1); // Also returns "2" 在这个例子中省略“new”关键字有什么坏处(或好处?无论您是否使用new调用函数,构造函数都会创建一个新函数。它就是这样写的。如果

我们都知道,不使用“new”关键字调用JavaScript构造函数是不好的。 那么,这是为什么:

Function("a", "b", "return a + b")(1, 1); // returns "2"
返回与此相同的值?:

new Function("a", "b", "return a + b")(1, 1); // Also returns "2"

在这个例子中省略“new”关键字有什么坏处(或好处?

无论您是否使用
new
调用
函数,构造函数都会创建一个新函数。它就是这样写的。如果需要,可以用这种方式编写构造函数

从:

将函数构造函数作为函数调用(不使用新的 运算符)与作为构造函数调用它具有相同的效果


函数
构造函数中使用或不使用
new
操作符没有任何伤害或好处,甚至没有任何区别。

没有。在没有
new
关键字的情况下调用
函数
确实没有任何伤害。事实上,我建议不要在程序中尽可能多地使用
new

最好是创建一个
新的
函数:

Function.prototype.new = function () {
    Factory.prototype = this.prototype;
    return new Factory(this, arguments);
};

function Factory(constructor, args) {
    return constructor.apply(this, args);
}
这样做的好处是,现在您可以按如下方式创建实例:

function Foo(a, b) {
    this.a = a;
    this.b = b;
}

var foo = Foo.new(1, 2);

// instead of

var foo = new Foo(1, 2);
重点是什么?关键是,您现在可以执行以下操作:

var foo = Foo.new.apply(Foo, [1, 2]);
Function.apply(null, ["a", "b", "return a + b"]);
因为
new
是一个函数,您可以对它执行一些操作,比如将其应用于参数数组等。您不能对
new
关键字执行相同的操作

无论如何,回到手头的主题,
函数
构造函数可以通过使用或不使用
new
关键字来调用。这没什么区别。因此,我建议您根本不要使用
new
关键字。它不仅可以为您节省一些击键次数,还可以用于以下用途:

var foo = Foo.new.apply(Foo, [1, 2]);
Function.apply(null, ["a", "b", "return a + b"]);
如果您不知道希望函数事先有多少个参数,这一点尤其有用


希望能有所帮助。

@Qantas94Heavy它不是重复的,因为链接问题中没有提到的
函数
构造函数。@Qantas94Heavy不,我没有保留此问题的既得利益。我可以马上结束这个问题。然而,我确实相信这确实是一个新问题,因为它解决了一些相关问题没有解决的问题。对于一个在StackOverflow上寻找答案的人来说,没有什么比必须遵循重复链接然后发现他们必须自己推断答案更令人恼火的了。只要是新的,就可以复制: