Прокси не обнаруживает изменения во вложенном массиве

1

Код модуля:

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 not called here, despite test.a being set.

Я ожидаю, что обработчик set запускаться в любое время, когда объект будет обновлен, но при нажатии на массив внутри объекта это не произойдет. Почему это не стреляет?

Я использую узел v8.1.4. Предположительно, все проблемы прокси были исправлены после v6.

Теги:
proxy
es6-proxy

1 ответ

1

К сожалению, прокси могут наблюдать только изменения, сделанные на целевом объекте - прокси не могут наблюдать изменения других объектов, вложенных в цель.

test и test.a - два отдельных объекта. Таким образом, в то время как Proxy - Вызываты set всякий раз, когда вносятся изменения test, не будет вызывать set всякий раз, когда вносятся изменения в test.a.

Если вы хотите наблюдать изменения объекта и всех вложенных дочерних элементов этого объекта, вы захотите использовать назначение библиотеки, созданную для задания.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню