我试图了解使用Object Constructor创建对象的过程。
在阅读了我的javascript书籍,在线资源,MDN和MSDN之后,我无法决定如何最好地定义对象构造函数。
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor
}
在上面的代码中,我应该将Object Constructor视为:
使用对象构造函数创建对象似乎就像创建对象模板一样,以后可以根据先前定义的"对象模板"创建该对象,然后填写对象模板。
请随意挑剔并帮助我准确定义这个术语并完全理解它。
答案 0 :(得分:1)
术语constructor function
或object constructor
指的是person
函数中的所有代码,以及期望此代码将与new
运算符一起使用,因此它将是给出this
指向的新对象。它是javascript中的一个功能,旨在以某种方式使用。
值得理解的是,Javascript中的构造函数只是一个普通的日常函数,旨在用作构造函数并设计为使用new
运算符调用。因为它设计为使用new
运算符调用,所以它假定它被赋予this
指向的品牌打击新对象。
构造函数内部的代码只需要执行正确初始化对象所需的代码。这可能是任何东西,从页面和代码页面 - 这完全取决于应用程序。
构造函数的另一个强大功能是你可以为它们分配一个原型,通过这样做,你告诉JS引擎当JS引擎在传递它之前创建初始对象时,你希望对象具有什么默认属性到构造函数。
所以,在你的例子中:
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor
}
您可以为原型添加一些方法:
Person.prototype = {
getFullName: function() {
return this.firstName + " " + this.lastName;
},
incrementAge: function() {
++this.age;
}
};
现在,当您创建一个新的Person
对象(我已经按照Javascript中的构造函数的常规约定切换到大写)时,您将获得一个包含代码分配的属性的对象在您的构造函数中,但它也将具有分配给原型的方法。
var p = new Person("Ted", "Williams", 39, "blue");
var fullname = p.getFullName(); // returns "Ted Williams"
在Javascript中使用原型进行方法通常更有效,而不是在构造函数中逐个分配每个方法,原型也提供了一种继承方式。
答案 1 :(得分:1)
简单地说,构造函数是一个构建给定类的对象的函数。例如,如果您有一个名为Person的类,则以下代码可以表示该类的参数化构造函数。
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor
}
这里我们有一个名为Person的类的参数化构造函数。构造函数被称为“参数化”构造函数,因为我们传入参数,在这种情况下有4个参数,分别是first,last,age和eyecolor。构造函数获取这4个值,并为有问题的对象设置firstName,lastName,age和eyeColor字段。
在程序中创建对象时,始终会调用默认构造函数。这个参数化的构造函数允许我们在创建时使用默认值构建一个对象,而不是像默认构造函数那样使用默认值设置它们。
答案 2 :(得分:0)
我不确定'官方'定义是什么,但我认为你的所有要点都适用。对象构造函数本质上是一个“构造”对象的函数。它通过构造函数内部的代码完成此任务,该代码可以使用其他代码(即:通过函数调用)来构造对象。从技术上讲,对象构造函数只是“函数”person
。但实际上,该函数需要其中的代码才能工作,所以你不能忽略它。
此外,它是js中的命名自定义,用大写字母命名对象构造函数。
function Person(first, last, age, eyecolor) {
this.firstName = first;
this.lastName = last;
this.age = age;
this.eyeColor = eyecolor;
}
var jim = new Person("Jimmy", "Smith", 22, "blue");
如果你想了解更多信息,这些值得阅读:
答案 3 :(得分:0)
“构造函数”是指函数所服务的角色。所有构造函数都只是函数,任何函数都可以通过new
调用它来用作构造函数。构造函数是一个函数,其编写目的是让new
调用它。
当函数用作构造函数(即,使用new
调用)时,调用的函数将其this
值设置为新创建的对象。新创建的this
对象是一个对象,其原型链以调用函数的prototype
值开头(因此,在您的情况下,对于新创建的this
,this.__proto__ === person.prototype
确实如此1}})。这意味着person.prototype
上的任何属性或方法都可以直接在新创建的对象上访问。
最后,如果构造函数没有显式返回一个对象,它将返回其新创建的this
对象。