Как мы можем изменить класс 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?