例如在经典的面向对象编程中,我可能有一个类School,它有一个String数组代表学生(不是理想的数据结构,但仅用于说明目的)。它可能看起来像这样
class School {
String name;
String[] students;
}
然后,我可以实例化一堆不同的学校,每个学校都有不同的名字和不同的学生。这个概念如何转化为Node.js?如果我有一个School模块,那么在整个应用程序中共享一个实例。我最初的想法是将每个学校表示为JSON对象,并且基本上传递JSON,我通常会在学校的一个实例中传递。这是正确的想法吗?有其他方法吗?
答案 0 :(得分:3)
如果状态应该从外部隐藏(即受保护的属性),您可以执行以下操作:
SchoolFactory = {
create: function(name, students) {
students = students || [];
// return the accessor methods
return {
getName: function() {
return name;
},
addStudent: function(student) {
students.push(student);
}
// add more methods if you need to
}
}
}
var school = SchoolFactory.create('Hogwarts');
console.log(school); // will not display the name or students
school.addStudent('Harry');
答案 1 :(得分:2)
构造函数和实例:
function School(name, students) {
this.name = name;
this.students = students || [];
};
School.prototype.enroll = function (student) {
if (!~this.students.indexOf(student)) {
this.students.push(student);
} else {
throw new Error("Student '" + student + "' already enrolled in " + this.name);
}
};
var s = new School("Lakewood");
console.log(s.name);
console.log(s.students);
s.enroll("Me");
console.log(s.students);
答案 2 :(得分:0)
我不关心任何模式......但是如果你喜欢这些模块......你可以申报一个学校模块并在其中导出一个学校课程。单个实例将不会被共享,因为您将实例化类