第一种方法是创建一个您只打算拥有的对象。这是给单身人士的。它直接创建student1
对象。
第二种方法是构造函数。可以一次又一次地使用构造函数来创建所需数量的这些对象。
按照惯例,构造函数最初应该是有上限的(例如,Student
而不是student
),就像 JavaScript 自己的对象(Date
, RegExp
, ...)一样。
您可以使用 JavaScript 原型链,以便所有Student
对象都使用相同的dispInfo
函数(具有不同的this
值),而不是dispInfo
为每个对象创建一个:
function Student (a, b, c) {
this.name = a;
this.course = b;
this.grade = c;
}
Student.prototype.dispInfo = function(){
return this.name + ' has an ' + this.grade;
};
var s1 = new Student("Mary", "Algebra", "A");
var s2 = new Student("Joe", "Classical Sculpture", "B+");
从 ES5 开始(对于旧版浏览器,“shims”也可以),您不必使用构造函数来拥有共享原型的对象,您可以使用它Object.create
来做到这一点。我更喜欢构造函数,但你也可以使用构造函数:
var StudentPrototype = {
dispInfo: function(){
return this.name + ' has an ' + this.grade;
}
};
function BuildStudent(a, b, c) {
var student = Object.create(StudentPrototype);
student.name = a;
student.course = b;
student.grade = c;
return student;
}
var s1 = BuildStudent("Mary", "Algebra", "A");
var s2 = BuildStudent("Joe", "Classical Sculpture", "B+");
请注意,我们不使用new
构建器函数,只使用构造器函数。(如果你这样做通常是无害的,但它对任何阅读代码的人来说都是不必要的和误导,所以你不想这样做。)
或者在那种简单的情况下你甚至不需要builder函数,你可以直接使用Object.create
,但它有点麻烦,因为如果你传入属性描述符(第二个参数),每个都必须是描述属性的对象,不仅仅是它的一个值(这是有充分理由的),所以你必须这样做{value: "the value"}
(当然,你可能想要指定关于该属性的其他内容,比如它是否是enumerable
等):
var StudentPrototype = {
dispInfo: function(){
return this.name + ' has an ' + this.grade;
}
};
var s1 = Object.create(StudentPrototype, {
name: {value: "Mary"},
course: {value: "Algebra"},
grade: {value: "A"}
});
var s2 = Object.create(StudentPrototype, {
name: {value: "Joe"},
course: {value: "Classical Sculpture"},
grade: {value: "B+"}
});
就个人而言,我更喜欢构造函数,但 JavaScript 的优点在于它支持多种编程风格,包括那些Object.create
更适合构建器或直接使用的编程风格。