1

例如,在经典的面向对象编程中,我可能有一个类 School ,它有一个代表学生的字符串数组(不是理想的数据结构,仅用于说明目的)。它可能看起来像这样

class School {
    String name;
    String[] students;
}

然后我可以实例化一堆不同的学校,每个学校都有不同的名字和不同的学生。这个概念如何转化为 Node.js?如果我有一个 School 模块,那么整个应用程序将共享一个实例。我最初的想法是将每所学校表示为 JSON 对象,并基本上传递 JSON,而我通常会传递 School 的实例。这是正确的想法吗?是否有替代方法?

4

3 回答 3

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');
于 2012-05-20T07:03:32.707 回答
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);
于 2012-05-20T06:36:46.933 回答
0

我不关心任何模式...但是如果您喜欢这些模块...您可以声明一个学校模块并在其导出中包含一个 School 类。不会共享单个实例,因为您将实例化该类

于 2012-05-20T06:36:15.723 回答