利用构造函数创建对象
前面学习的字面量的方式只适合创建一个对象,而当需要创建多个对象时,还要将对象的每个成员都写一遍,显得比较麻烦,因此,可以用构造函数来创建对象。使用构造函数创建对象的语法为“new 构造函数名()”,在小括号中可以传递参数给构造函数,如果没有参数,小括号可以省略。实际上,“new Object()”就是一种使用构造函数创建对象的方式,Object就是构造函数的名称,但这种方式创建出来的是一个空对象。如果我们想要创建的是一些具有相同特征的对象,则可以自己写一个构造函数。其基本语法如下。
// 编写构造函数
function 构造函数名() {
this.属性 = 属性;
this.方法 = function() {
// 方法体
};
}
// 使用构造函数创建对象
var obj = new 构造函数名();
在上述代码中,构造函数中的this表示新创建出来的对象,在构造函数中可以通过this来为新创建出来的对象添加成员。需要注意的是,构造函数的名称推荐首字母大写。
下面我们通过代码演示如何编写一个Student构造函数,并创建对象,具体代码如下。
// 编写一个Student构造函数
function Student(name, age) {
this.name = name;
this.age = age;
this.sayHello = function() {
console.log('你好,我叫' + this.name);
};
}
// 使用Student构造函数创建对象
var stu1 = new Student('小明', 18);
console.log(stu1.name); // 输出结果:小明
console.log(stu1.sayHello()); // 输出结果:你好,我叫小明
var stu2 = new Student('小红', 17);
console.log(stu2.name); // 输出结果:小红
console.log(stu2.sayHello()); // 输出结果:你好,我叫小红
通过上述代码可以看出,利用构造函数可以很方便地创建同一类对象(如学生),在创建时,只需将不同对象的属性值通过参数传进去即可。
JavaScript中的构造函数类似于传统面向对象语言(如Java)中的类(class),所以在JavaScript中也可以使用面向对象编程中的一些术语,具体如下。
抽象:将一类对象的共同特征提取出来,编写成一个构造函数(类)的过程,称为抽象。
实例化:利用构造函数(类)创建对象的过程,称为实例化。
实例:如果stu1对象是由Student构造函数创建出来的,则stu1对象称为Student构造函数的实例(或称为实例对象)。