javascript - 代理未检测到嵌套数组的更改

标签 javascript node.js proxy es6-proxy

模块代码:

const fs = require('fs');

class database {
    constructor(database, object) {
        typeof database === "object" && (object = database);
        this.file = (typeof database === "string" ? database : 'db') + '.json';
        object && fs.writeFileSync(this.file, JSON.stringify(object));
        this.db = fs.existsSync(this.file) ? JSON.parse(fs.readFileSync(this.file, 'utf-8')) : {};
        return new Proxy(this.db, this)
    }

    set(target, key, value) {
        this.db[key] = value;
        fs.writeFileSync(this.file, JSON.stringify(this.db));
    }

}

module.exports = database;

示例脚本:

var db = require('./index.js')
var test = new db();

test.a = []; // Proxy is called here
test.a.push('a'); // It's not called here, despite test.a being set.

我希望 set 处理程序在对象更新时触发,但是当推送到对象内部的数组时,它不会发生。为什么不开火?

我正在使用 Node v8.1.4。据说所有代理问题都在 v6 之后得到修复。

最佳答案

不幸的是,代理只能观察对目标对象所做的更改——代理不能观察对嵌套在目标上的其他对象的更改。

testtest.a 是两个独立的对象。因此,虽然 Proxy 会在 test 发生更改时调用 set,但它不会在更改时调用 set制作成test.a

如果您想观察一个对象和该对象的所有嵌套子对象的变化,那么您需要 use a library专为工作而打造。

关于javascript - 代理未检测到嵌套数组的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47688576/

相关文章:

javascript - 如何使用 HTML/CSS/JavaScript 开发桌面应用程序?

javascript - 有条件地调用一个 promise (或不调用),但将任一结果返回给另一个 promise

node.js - VS Task Runner Explorer - Node Sass 找不到绑定(bind)

android - 如何阻止 charles 代理中的本地主机流量?

javascript - OpenLayers,很好的标记聚类

javascript - jquery:循环相似的div

javascript - else if 不打印控制台值

node.js - npm安装错误 Node

java - 如果 Spring 可以成功拦截 @Configuration 类中的类内函数调用,为什么它在常规 bean 中不支持呢?

docker - 如何使用no_proxy设置设置Docker