javascript - 在 JavaScript 中,依赖对 "listen"的对象引用进行更改是一种好习惯吗?

标签 javascript design-patterns pass-by-reference anti-patterns

我必须实现一个类似于存储库模式的对象,它将维护一个项目列表。 repo 看起来像这样:

var repository = {

    data: [],

    getAll: function() {
        return this.data;
    },

    update: function() { ... }
}

repo 数据的最终消费者将是某个组件。我正在考虑利用对 repo 数据数组的引用,以便在 DOM 发生变化时更新它:

function ItemList() {
    this.data = repository.getData();

    when (this.data is changed) {
        update the view
    }

    this.userInput = function() {
        repository.update();
    }
}

虽然它感觉很简洁并且据说使用了合法的功能,但这真的是个好主意吗?我应该改用存储库中的观察者/通知吗?

var repository = {
    ...
    onDataChange: function(callback) { ... }
}

您可以在此处找到示例(使用 Angular):http://jsfiddle.net/xen8m148/

最佳答案

取决于您如何实现绝对非内置的“已更改” =) 通常,如果您想减少虚假处理,发布/订阅模型会更好。如果您不关心浪费的 CPU 周期,那么您可以使用 Object.observe 来查看对象变化。

不过,从软件工程的 Angular 来看,您似乎在两个所有者之间共享您的数据,而这(而不是您如何监听更改)在未来可能是一个更大的问题。

关于javascript - 在 JavaScript 中,依赖对 "listen"的对象引用进行更改是一种好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31210884/

相关文章:

javascript - 在 chart.js 中使用 JSON 文件

design-patterns - ServiceStack + ORMLite + 存储库模式

c# - 3 层应用程序中的配置设置放置

java - java中具体的树数据结构

javascript - 使用 Object.create(null) 创建的 map 具有 toString 属性

javascript - 将单选按钮数值打印到文本框

c++ - C++ 解释器 : Function table storage problem

c# - C# 垃圾收集器如何找到唯一引用是内部指针的对象?

c++ - 使用带引用的函数作为带指针的函数?

javascript - 如何在 : window. 之后恢复正常滚动 onscroll = function () { window.scrollTo(0, 0);