gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:55:44 25 4
gpt4 key购买 nike

模块代码:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com