function catRecord(name, birthdate, mother) {
return {name: name, birth: birthdate, mother: mother};
}
我对构造函数的理解是一个用于构建对象的函数。
这个 catRecord 函数会算作构造函数吗?
function catRecord(name, birthdate, mother) {
return {name: name, birth: birthdate, mother: mother};
}
我对构造函数的理解是一个用于构建对象的函数。
这个 catRecord 函数会算作构造函数吗?
这个 catRecord 函数会算作构造函数吗?
没有。
它与构造函数非常相似,是的,但我不会调用所有返回对象“构造函数”的函数/方法。当不涉及继承时,我使用术语工厂代替。
EcmaScript 规范将构造函数简单地定义为
创建和初始化对象的函数对象。
尽管它下面已经有关于原型继承的注释。在语言概述中它说
构造函数是一个具有名为“<code>prototype”的属性的函数,用于实现基于原型的继承和共享属性。
因此,虽然从技术上讲,实现 的每个对象[[construct]]
都是构造函数,但在 JavaScript 中,术语“构造函数”仅用于旨在与new
关键字一起使用并创建共享公共实例prototype
(形成“类”)的函数。按照惯例,他们的名字是大写的。
不,您给出的函数返回一个没有类型信息的新关联数组。你所追求的构造函数是这样的:
function fixedCatRecord(name, birthdate, mother) {
this.name = name;
this.birthdate = birthdate;
this.mother = mother;
}
这样,您将拥有一个知道它是 fixedCatRecord 的对象,这意味着它可以访问所有适当的元数据(例如知道您可以调用哪些方法)。
请注意,它们都可以与“new”一起使用,但它将是 Object 类型的对象(这是关联数组的默认值),而不是catRecord 类型的对象。
例如,如果您正在使用 console.log 提供类型信息的东西(如 Chrome):
// this is an Object, not what you want!
console.log(new catRecord("Fluffy", "12/12/12", "Melody"));
// this is a fixedCatRecord, good!
console.log(new fixedCatRecord("Fluffy", "12/12/12", "Melody"));
构造函数是一个函数,每当我们创建类的实例时都会自动调用它。
返回对创建实例原型的 Object 函数的引用。请注意,此属性的值是对函数本身的引用,而不是包含函数名称的字符串,但它不是只读的(原始布尔值、数字或字符串值除外:1、true、“只读” )。
如果我们将创建一个Date
类的实例,那么:
var e = new Date();
alert(e.constructor); //return Date
然后它的构造函数将返回Date类Date
的构造函数的名称。
同样,如果我们将创建 Number 的实例,var n = new Number(5);
那么它的构造函数将返回 Number,该 Number 将作为构造函数的名称。
参考。
例子:
var Vehicle = function Vehicle() {
// ...
}
var vehicle = new Vehicle();
调用构造函数时会发生什么?
当new Vehicle()
被调用时,JavaScript 会做四件事:
function Employee() // Class and constructor
{
this.name = "A";
this.age = "23";
}
var a = new Employee(); // Creating instance
alert(a.name); // alerts A
function Employee(a,b) // Class and constructor
{
this.name = a;
this.age = b;
}
var one = new Employee("A",23); // Creating instance
var two = new Employee("B",25); // Creating instance
alert(two.name); // alerts B
希望上面的例子能解释你所需要的一切
额外的 :
如果你想给类添加一个方法Employee
,你应该使用prototype
Employee.prototype.printName = function()
{
document.write(this.name);
};
two.printName(); // Writes B