Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 什么是构造函数?什么样的函数对象可以被称为构造函数?_Javascript - Fatal编程技术网

Javascript 什么是构造函数?什么样的函数对象可以被称为构造函数?

Javascript 什么是构造函数?什么样的函数对象可以被称为构造函数?,javascript,Javascript,我正在学习javascript,我对这个定义感到困惑。 我在ECMA中查找,它将构造函数定义为 创建和初始化对象的函数对象 那么,任何函数对象都可以被称为构造函数吗?在js中,如果函数构造函数的目标是使用新的运算符调用,那么调用函数构造函数是很常见的: var me = new Human;//Human is a constructor 然而,人类语言的定义并不是那么严格,所以您可能总是可以使用它,您只需要为您的使用提供好的参数。一个有争议的好例子: 那么,任何函数对象都可以被称为构造函数吗

我正在学习javascript,我对这个定义感到困惑。 我在ECMA中查找,它将构造函数定义为

创建和初始化对象的函数对象


那么,任何函数对象都可以被称为构造函数吗?

在js中,如果函数构造函数的目标是使用新的运算符调用,那么调用函数构造函数是很常见的:

var me = new Human;//Human is a constructor
然而,人类语言的定义并不是那么严格,所以您可能总是可以使用它,您只需要为您的使用提供好的参数。一个有争议的好例子:

那么,任何函数对象都可以被称为构造函数吗

但并非每个函数都创建或初始化对象。考虑这个例子:

function add(a, b) {
   return a + b;
}
此函数仅添加两个值

什么是构造函数?什么样的函数对象可以被称为构造函数

我认为只有打算用
new
调用的函数才应该被视为“构造函数”(包括通过
class
创建的函数)

但是,您也可以创建对象,而无需使用
new
调用函数:

function getPerson(name) {
   return {name: name};
}

不管你是否考虑这样的函数,构造函数可能是主观的。

构造函数可以被认为是定义对象如何创建的模板。函数对象可能会创建一个对象,但在这一点上它可能与构造函数有所不同。如果按照规范,其中有一部分会说:函数对象不一定是构造函数,这样的非构造函数函数对象没有[[Construct]]内部方法。例如箭头函数、方法、Function.prototype、生成器函数和异步函数,它们不是构造函数。“实际上是工厂函数”这也是我最初的想法,但Wikipedia有这样一句话:“正式地说,工厂是返回不同原型或类的对象的函数或方法”。因此,如果一个工厂返回不同的“种类”的对象,它通常只考虑一个工厂的功能。这都是语义学真的…@felix kling现在变得很棘手;)
function getPerson(name) {
   return {name: name};
}