2016-10-20 1 views
0

Я хочу, чтобы обернуть значения в массиве, всякий раз, когда они установлены на моем объекте, но я хочу, чтобы «глобальные» объект пространства имен ЧИСТОГОES6 сеттер - сохранить объект ЧИСТОГО // карты Params на объекте экземпляра

проблема заключается в том, что у меня есть список из 8 реквизита, которые имеют такое же требование

Я не хочу, чтобы объект быть загрязнен тоннами get и set, плюс this._left, чтобы избежать бесконечного цикла при установке такого же пропеллера, что это контролируемых установщиком ....

Например:

class Tree { 
    constructor (config) { 
     this.left = config.left || [this]; 
     this.right = config.right || [this]; 
     this.child = config.child || [this]; 
     this.parent = config.parent || [this]; 
     this.somethingElse = config.somethingElse || [this]; 
     // etc. 
    } 
} 

myObj = new Tree(); 

myObj.left = 2; 

Я хочу, чтобы гарантировать, что myObj.next === [2]


Моя попытка (слишком загрязнен):

['left', 'right', 'child', 'parent', 'etc', 'adfasdf', 'dsfmkfs', 'previous'].forEach(direction => { 
    Object.defineProperty(this, prop, { 
     set: (val) => { 
      if (!Array.isArray(val)) { 
       this['_' + prop] = [val] 
      } else { 
       this['_' + prop] = val; 
      } 
     }, 
     get: (val) => { 
      return this['_' + prop]; 
     } 
    }); 
}); 
+1

Одно усовершенствования было бы использовать 'пусть реквизит = {}' 'сохраняющих реквизита [«_»+ проп] = значение 'по крайней мере сохранить частные vars от глобального – neaumusic

+1

Что означает« сохранить пространство имен глобальных объектов чистым »? И почему вы пытаетесь достичь этого? С какой целью? – jfriend00

+0

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

ответ

1

Вы не можете иметь сеттеры/добытчиками без сеттеры/добытчиками. Тем не менее, вам не обязательно нужно это подчеркивание префикса свойства для хранения значений:

['left', 'right', 'child', 'parent', 'etc', 'adfasdf', 'dsfmkfs', 'previous'].forEach(prop => { 
    var value = [this]; 
    Object.defineProperty(this, prop, { 
     set(val) { 
      if (!Array.isArray(val)) { 
       val = [val]; 
      } 
      value = val; 
     }, 
     get(val) { 
      return value; 
     }, 
     enumerable: true, 
     configurable: true 
    }); 
}); 
Смежные вопросы