我试图理解使用对象构造函数创建对象的过程。
阅读我的 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/