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