Как обработать доступ к недоступным / "невидимым" свойствам в JavaScript? - PullRequest
0 голосов
/ 08 января 2019

Как мы можем изменить класс JavaScript, чтобы мы могли создать метод для обработки доступа к недоступным свойствам?

Например, если у нас есть такой класс:

import {Map as MutableMap} from "extendable-immutable"

export class Map extends MutableMap {

    constructor(...args) {
        super(...args);

        return this.asMutable()
    }
}

, где я использую расширяемый-неизменяемый для расширения классов ImmutableJS . Там, где основное внимание здесь уделяется не неизменности, я просто использую ImmutableJS, чтобы воспользоваться преимуществами его структур данных. (Я изменяю объект на изменяемый в конструкторе.)

С помощью класса выше мы можем создать что-то вроде:

const object = new Map({"a": 1, "b": 2});

и доступ к свойству / ключу / значению с помощью:

object.get("a");

Но мне нужен способ доступа к таким свойствам, как объект, например:

object.a

Мотивация для этого заключается в том, что некоторые библиотеки, такие как ag-grid , не знают, как обращаться с такого рода доступом.

Так что вместо того, чтобы нуждаться в чем-то вроде этого:

const a = object.get("a");
object.set("a", 3);

Я бы хотел сделать что-то вроде этого:

const a = object.a;
object.a = 3;

Я знаю, что мы могли бы создать эти свойства внутри класса, а затем создать геттеры и сеттеры для всех них, но, поскольку я хотел бы использовать это с картами разного типа, с разными ключами / свойствами, я ищу что-то более автоматический.

В ruby ​​мы могли бы использовать что-то вроде method_missing , в PHP мы могли бы использовать магические методы , такие как __call, __get или __set.

Так как мы можем сделать это в JavaScript?

...