什么是对象构造函数?

时间:2014-08-28 01:27:01

标签: javascript

我试图了解使用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视为:

  • 整个函数以及随之而来的所有代码?
  • 只是功能" person()"
  • 或者它只是一个术语,指的是JavaScript引擎必须做的任何幕后操作,以及#34;创建"我在记忆中的对象?

使用对象构造函数创建对象似乎就像创建对象模板一样,以后可以根据先前定义的"对象模板"创建该对象,然后填写对象模板。

请随意挑剔并帮助我准确定义这个术语并完全理解它。

4 个答案:

答案 0 :(得分:1)

术语constructor functionobject 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值开头(因此,在您的情况下,对于新创建的thisthis.__proto__ === person.prototype确实如此1}})。这意味着person.prototype上的任何属性或方法都可以直接在新创建的对象上访问。

最后,如果构造函数没有显式返回一个对象,它将返回其新创建的this对象。