Javascript 什么是对象构造函数?

Javascript 什么是对象构造函数?,javascript,Javascript,我试图理解使用对象构造函数创建对象的过程 function Person(first, last, age, eyecolor) { this.firstName = first; this.lastName = last; this.age = age; this.eyeColor = eyecolor } 在阅读了我的javascript书籍《在线资源》、《MDN和MSDN》之后,我无法决定如何最好地定义对象构造函数 function Person(firs

我试图理解使用对象构造函数创建对象的过程

function Person(first, last, age, eyecolor) {
    this.firstName = first;
    this.lastName = last;
    this.age = age;
    this.eyeColor = eyecolor
}
在阅读了我的javascript书籍《在线资源》、《MDN和MSDN》之后,我无法决定如何最好地定义对象构造函数

function Person(first, last, age, eyecolor) {
    this.firstName = first;
    this.lastName = last;
    this.age = age;
    this.eyeColor = eyecolor
}
在上面的代码中,我应该将对象构造函数看作:

  • 整个函数及其附带的所有代码
  • 只有函数“person()”
  • 或者它只是一个术语,用于描述JavaScript引擎在内存中“创建”我的对象所必须做的任何幕后工作
似乎使用对象构造函数创建对象就像创建对象模板一样,您可以稍后在基于先前定义的“对象模板”同时创建该对象时填充该模板


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

我不确定“官方”的定义是什么,但我认为你的观点都适用。对象构造函数本质上是“构造”对象的函数。它通过构造函数中的代码来实现,构造函数可以使用其他代码(即:通过函数调用)来构造对象。从技术上讲,对象构造函数“只是”函数
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");
如果您想了解更多信息,请阅读以下内容:


术语
构造函数
对象构造函数
指的是
person
函数中的所有代码,并且期望此代码将与
new
操作符一起使用,因此它将被赋予一个
指向的新对象。它是javascript中的一个函数,旨在以某种方式使用

值得理解的是,Javascript中的构造函数只是一个普通的日常函数,它被设计为构造函数,并被设计为使用
new
操作符调用。因为它被设计为使用
new
操作符调用,所以它假定它被赋予了一个
这个
指向的全新对象

构造函数中的代码只需要执行正确初始化对象所需的操作。这可以是从零到一页又一页的代码,这完全取决于应用程序

构造器函数的另一个强大方面是,您可以为它们分配一个原型,通过这样做,您可以告诉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中,将原型用于方法通常比在构造函数中逐个分配每个方法更有效,而原型也提供了一种继承方法。

“构造函数”指的是函数所服务的角色。所有构造函数都只是函数,任何函数都可以通过
new
调用它作为构造函数使用。构造函数是一个函数,编写它的目的是让
new
调用它

当函数用作构造函数(即,使用
new
调用)时,调用的函数将其
this
值设置为新创建的对象。新创建的
this
对象是一个对象,其原型链以被调用函数的
prototype
值开始(因此,在您的例子中,对于新创建的
this
,确实是
this.\uuu proto\uuu==person.prototype
)。这意味着可以在新创建的对象上直接访问
person.prototype
上的任何属性或方法


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

简单地说,构造函数是一个构建给定类对象的函数。例如,如果您有一个名为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字段


在程序中创建对象时,始终调用默认构造函数。此参数化构造函数允许我们在创建时使用默认值构建对象,而不是像默认构造函数那样使用默认值设置对象

它是一个构造函数,当你创建一个
新的
实例时,它就变成了一个对象。按照惯例,构造函数的名字是大写的,比如
Person
。这是一种记住调用时必须使用
new
的方法。您还可以创建对象文本的
new
实例,例如:
if(!Object.create){Object.create=function(o){function F(){};F.prototype=o;return new F;}。现在只需使用
var pers={prop:'value'},newPers=Object.create(pers)。当然,您不能将参数传递给对象。您对“整个函数及其附带的所有代码”和“仅函数”的区别是什么?T