Я пытался быть хитрым разработчиком и потерялся в ES6 Proxies. По сути, я хотел захватить любой get или set в свойстве из другого класса, который я написал, и убедиться, что они хранятся где-то еще, помимо объекта. Это выглядит так:
'use strict'
class MyObject()
{
superAwesomeFunction(){//super awesome code goes here}
}
const myProxyObject = new Proxy(MyObject, {
get: function(target, name, receiver)
{
if([CONDITIONS THAT MEET MY DEMANDS])
{
// deliver property values if they are
// my super cool database (if they exist)
}
// else just ya know, forward it to the actual MyObject
// property, if it's an actual property on MyObject
return target[name];
},
set: function(target, name, value)
{
if([CONDITIONS THAT MEET MY DEMANDS])
{
// set property values if they are
// to super cool database
}
else
{
// just set the value to the property, which
// gets created if it doesn't exist (WHICH IS SO COOL)
target[name] = value;
}
return true;
}
Хорошо, что самое интересное в этом? вы можете сделать что-то вроде:
// property that doesn't exist (yet)
console.log(myProxyObject.wholivesinapineappleunderthesea);
// but wait for it...
myProxyObject.wholivesinapineappleunderthesea = 'spongebob';
// bam! now it exists on the object, AND lives in my DB!
console.log(myProxyObject.wholivesinapineappleunderthesea);
Что, несмотря на то, что много работы над чем-то глупым, я не могу объяснить, насколько я счастлив от этого. Однако с этим есть проблема. Помните, что superAwesomeFunction () я вставил в MyObject ()? Что ж, всякий раз, когда я пытаюсь назвать это сейчас, ES6 доставляет мне такую грусть:
myProxyObject.superAwesomeFunction не является функцией
ES6 восседает на троне ЛЖИ! Это полностью верно? Хорошо, я почти уверен, что улавливаю что-то не так, потому что при отладке я вижу, что секция get прокси-сервера фактически принимает вызов superAwesomeFunction (, который имеет смысл как superAwesomeFunction - это свойство, содержащее функцию () {})
ВОПРОС: Кто-нибудь знает какое-нибудь решение, которое позволит мне сохранить мои нелепые свойства на лету и по-прежнему вызывать мою superAwesomeFunction ()? Это ловушка применения?
const myProxyObject = new Proxy(new MyObject(), {...})
. - person idbehold   schedule 21.04.2017