我是面向对象编程的新手,正在慢慢学习如何将其应用于 javascript。所以请多多包涵。 :)
我有两个基本对象:
“record”,其中包含用于编辑记录集中单个记录的方法。 (创建、保存、加载等)
“recordList”,其中包含用于输出记录标题分页列表的方法。
我希望这些对象能够协同工作。例如,如果 record.save() 被调用,recordList.refresh() 也会被调用,因此分页列表反射(reflect)更新的数据。
为此,我创建了第三个对象“control”,它包含“record”和“recordList”的实例。我以下列方式使用“控制”:
control = {}
control.record = object.create("record");
control.recordList = object.create("recordList");
control.save = function() {
this.record.save();
this.recordList.refresh();
};
这行得通。但我想知道,这样做合适吗? (我想确保这样做没有违反 OO 设计的任何规则。)有没有更好的方法?
预先感谢您的帮助。
最佳答案
从 OOP 的 Angular 来说,我不认为记录会自救。数据库中的记录只是数据,而数据库本身就是对数据进行处理,无论是保存还是加载等等。话虽这么说,我会让记录只是一个保存数据的对象,并会创建一个记录集对象用于与数据交互。在该记录集对象中,您可以放置您的 recordList 并相应地更新它。像这样的东西:
var recordset = function() {
var me = this;
var currentRecord = object.create("record");
var recordList = object.create("recordList");
me.save = function() {
//Insert record.save code here
recordList.refresh();
};
};
关于该代码的一些注意事项。在该设置中,无法从函数外部访问 currentRecord 和 recordList,因此您进行了封装,这是 OOP 的标志之一。这是因为记录集函数是一个“关闭”其中所有变量的闭包,这意味着其中的每个函数都可以访问记录集范围内的变量。
您可以让外界通过 get 或 set 函数访问:
me.getRecordList = function() {
return recordList.getArray(); //Not generally a good idea to simply return your internal object
};
关于javascript - 在javascript中控制相关对象的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2280912/