javascript - 什么是对象构造函数?

标签 javascript

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

阅读我的 javascript 书籍、在线资源、MDN 和 MSDN 后,我无法决定如何最好地定义对象构造函数。

function Person(first, last, age, eyecolor) {
    this.firstName = first;
    this.lastName = last;
    this.age = age;
    this.eyeColor = eyecolor
}

在上面的代码中,我应该将对象构造函数视为:

  • 整个函数以及与之相关的所有代码?
  • 只是函数“person()”
  • 或者它只是一个术语,指的是 JavaScript 引擎在内存中“创建”我的对象时必须执行的任何幕后操作?

使用对象构造函数创建对象似乎就像创建一个对象模板,您可以稍后填写该模板,同时根据之前定义的“对象模板”创建该对象。

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

最佳答案

术语构造函数对象构造函数指的是person函数中的所有代码以及该代码将与new 运算符,因此它将获得一个 this 指向的新对象。它是 JavaScript 中的一个函数,旨在以某种方式使用。

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

构造函数内的代码只需执行正确初始化对象所需的操作。这可以是任何东西,从什么都没有到一页又一页的代码——这完全取决于应用程序。

构造函数的另一个强大的方面是,您可以为它们分配一个原型(prototype),通过这样做,您可以告诉 JS 引擎,当 JS 引擎在传递初始对象之前创建初始对象时,您希望该对象具有哪些默认属性到构造函数。

因此,在您的示例中:

function Person(first, last, age, eyecolor) {
    this.firstName = first;
    this.lastName = last;
    this.age = age;
    this.eyeColor = eyecolor
}

您可以向原型(prototype)添加一些方法:

Person.prototype = {
    getFullName: function() {
        return this.firstName + " " + this.lastName;
    },
    incrementAge: function() {
        ++this.age;
    }
};

现在,当您创建一个新的 Person 对象时(我已切换为大写,这是 Javascript 中构造函数的通常约定),您将获得一个对象,该对象具有您的代码所具有的两个属性在构造函数中分配,但它也将具有分配给原型(prototype)的方法。

var p = new Person("Ted", "Williams", 39, "blue");
var fullname = p.getFullName();    // returns "Ted Williams"

在 Javascript 中,使用方法的原型(prototype)通常比在构造函数中逐一分配每个方法更有效,而且原型(prototype)也提供了一种继承方式。

关于javascript - 什么是对象构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25539356/

相关文章:

javascript - 适用于分块的浏览器的客户端虚拟文件系统

javascript - 完成ajax调用后继续在js程序中

javascript - 如何使用方法应用 css 属性数组,无需链接/jquery

javascript - ng-model AngularJS 中的表达

javascript - 在测试 Node 服务器上启用 SSL

javascript - 建立并返回一系列返回的 promise

javascript - jQuery 如何在表中使用输入字段追加数据

javascript - 需要相同的模块,不同的路径,变量不共享

javascript - gulp预处理是否支持其他分支

javascript - 如果跨度中显示特定文本(价格 0),则隐藏元素