我一直在学习JavaScript,我在JavaScript中使用了函数关键字函数。在此更具体地说明其使用的三个不同的例子。特别是第二个例子中的new function
让我感到困惑的是为什么新的,为什么不是资本F
var sum = new Function('a', 'b', 'return a + b');
console.log(sum(2, 6));
// expected output: 8
----------------------------------------------------------------
var apple = new function () {
this.type = "macintosh";
this.color = "red";
this.getInfo = function () {
return this.color + ' ' + this.type + ' apple';
};
}
apple.color = "reddish";
console.log(apple.getInfo());
// expected output: "reddish macintosh apple"
--------------------------------------------------------------------
var getRectArea = function(width, height) {
return width * height;
}
console.log(getRectArea(3,4));
// expected output: 12
--------------------------------------------------------------------------
答案 0 :(得分:1)
new Function
使用函数构造函数创建一个新函数(该函数名为'函数'大写' F')。
混淆来自这样的事实:在javascript中,构造函数的定义与任何其他函数一样(它们实际上是普通函数)。
const o = new function(){ this.foo = "bar"; };
定义了一个匿名函数(恰好将内容分配给this
,因此我们可以将其称为构造函数),并使用它来初始化一个新对象(仅由{{1}创建) }关键字)。它类似于:
new
唯一的区别是,在您的情况下,函数A没有名称,只在创建后立即使用一次。
上面的示例(几乎)类似于:
function A(){ /* ... */ };
const apple = new A; // or `new A()` but the parentheses are facultative if
// there is no arguments
答案 1 :(得分:0)
new
关键字与构造函数一起使用以创建对象实例。构造函数是函数,函数是一种对象。
按照惯例,构造函数首先以大写字母命名。 new Function()
使用Function
构造函数创建新的函数对象。它不是非常有用,但它可以用来动态创建可运行的代码(这也意味着它带来了许多潜在的风险)。
就像使用new
创建的任何对象一样,结果是其构造函数的实例,在本例中为Function
。
new function() {}
只使用匿名函数作为构造函数。函数体this
内部将是正在创建的新对象实例。这并没有多大意义,因为实例化一个对象的目的是使它具有一个可识别的"类型"并从prototype
获取属性,使用匿名函数作为构造函数都不可能。
var getRectArea = function(width, height) { return width * height; }
只是创建一个函数并将其分配给名为getRectArea
的变量。该函数可以用作构造函数,但在这种情况下,它只是一个返回值的常规函数。
该函数仍然是Function
的实例,因此理论上它可以看作是使用new Function
构造函数的简写,但实际上它意味着函数在运行时被解释,因此Javascript解释器可以语法检查并优化它,如果它被写为new Function("width", "height", "return width * height")