То, что я пытаюсь достичь: выходДинамический наблюдаемый объект
var obj = new Dynamic({data:"something",data2:"something else"},function(val){
console.log('"'+val+'"');
});
console.log(obj.data,obj.data2);
obj.data = "this thing here";
console.log(obj.data,obj.data2);
консоли
"something" "something else"
"this thing here"
"something" "something else"
Мой выходной ток консоли
"something else" "something else"
"this thing here"
"this thing here" "this thing here"
Мой Dynamic
метод выглядит примерно так:
function Dynamic(obj,method){
var ret;
var Update = method;
if(obj instanceof Object){
ret = {};
for(var a in obj){
Object.defineProperty(ret,a,{
set: function(v){
inner = v;
Update.call(this,inner);
},
get: function(){
return inner;
}
});
ret[a] = (obj[a] instanceof Array||obj[a] instanceof Object)?Dynamic(obj[a],Update):obj[a];
}
}
return ret;
}
Проблема с этим, каждые ссылки собственности inner
, а не их собственная версия внутреннего
Я попытался
Object.defineProperty(ret,a,{
//set: {dadedadeda}
//get: {dadedadeda}
value:obj[a]});
Но это не работает из-за this issue with get, set, and value, который является Humongous надзор в мое мнение (что, если мы хотим значение, но и хотят, чтобы перехватить вызовы?)
Я также попытался
Object.defineProperty(ret,a,{
//set: {dadedadeda}
//get: {return this.inner;}
inner:obj[a]});
Но мне кажется, что это то, что просто не бывает, и this
относится ко всему объекту в любом случае, й