在javascript中控制相关对象的正确方法是什么?

Tra*_*vis 7 javascript oop

我是面向对象编程的新手,正在慢慢学习如何将它应用于javascript.所以请耐心等待.:)

我有两个基本对象:

  1. "record",包含从记录集编辑单个记录的方法.(创建,保存,加载等)

  2. "recordList",其中包含用于输出分页记录标题列表的方法.

我希望这些对象能够一起工作.例如,如果调用record.save(),则还会调用recordList.refresh(),以便分页列表反映更新的数据.

为了实现这一点,我创建了第三个对象"control",它包含"record"和"recordList"的实例.我以下列方式使用"控制":

control = {}

    control.record = object.create("record");
    control.recordList = object.create("recordList");

    control.save = function() {

        this.record.save();
        this.recordList.refresh();

    };
Run Code Online (Sandbox Code Playgroud)

这有效.但我想知道,这是正确的吗?(我想确保在执行此操作时我没有违反OO设计的任何规则.)有更好的方法吗?

在此先感谢您的帮助.

Bob*_*Bob 1

从面向对象编程的角度来看,我认为记录不会自我拯救。数据库中的记录只是数据,数据库本身就是对这些数据进行处理的,无论是保存还是加载等等。话虽这么说,我会让记录只是一个保存数据的对象,并创建一个记录集对象用于与数据交互。在该记录集对象中,您可以放置​​记录列表并相应地更新它。就像是:

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();
    };
};
Run Code Online (Sandbox Code Playgroud)

关于该代码需要注意的一些事情。在该设置中,无法从函数外部访问 currentRecord 和 recordList,因此您拥有封装,这是 OOP 的标志之一。这是因为记录集函数是一个“封闭”其中所有变量的闭包,这意味着其中的每个函数都可以访问记录集范围内的变量。

您可以让外界通过 get 或 set 函数进行访问:

    me.getRecordList = function() {
        return recordList.getArray(); //Not generally a good idea to simply return your internal object
    };
Run Code Online (Sandbox Code Playgroud)