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