@QuDDoSS
Девелопер

Как выводить default value для object?

Здравствуйте, вопрос может задал не правильно, но ....

const path = {
    styles : {
        src: './path-to-styles-src',
        dist: './path-to-styles-dist'
    },
    images: {
        src: './path-to-images-src',
        dist: './path-to-images-dist'
    },
    ...
}


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

path.styles => './path-to-styles-src' 
path.styles.dist => './path-to-styles-dist'

path.images =>  './path-to-images-src' 
path.images.dist => './path-to-images-dist'


P.S. Это всего лишь пример, и комментарии как "Тебе лень прописать ключ .src ?" не нужны.

Всем низкий поклон за помошь !
  • Вопрос задан
  • 116 просмотров
Решения вопроса 2
k12th
@k12th
console.log(`You're pulling my leg, right?`);
Если у объекта есть метод toString, то при приведении к строке вызывается этот метод (ну если честно, этот метод есть у всех, он наследуется из Object.prototype). Таким образом, если сделать
const path = {
    styles : {
        src: './path-to-styles-src',
        dist: './path-to-styles-dist',
        toString() { return this.src },
    },
}

то потом можно делать примерно так:
console.log('' + path.styles)
Ответ написан
RAX7
@RAX7
Можно объект в прокси обернуть
const pathHandler = {
  get(target, prop) {
    const val = target[prop];
    if (typeof val === 'object' && val.hasOwnProperty('src')) {
      val.toString = function() {
        return this.src;
      };
      return new Proxy(val, pathHandler);
    } else {
      return target[prop];
    }
  }
}

const path = new Proxy({
  styles: {
    src: './path-to-styles-src',
    dist: './path-to-styles-dist',
    scss: {
      src: './scss-src',
      dist: './scss-dist',
    }
  },
  images: {
    src: './path-to-images-src',
    dist: './path-to-images-dist'
  },
}, pathHandler);

console.log('' + path.styles);              // './path-to-styles-src'
console.log('' + path.styles.dist);       // './path-to-styles-dist'
console.log('' + path.styles.scss);       // './scss-src'
console.log('' + path.styles.scss.dist); // './scss-dist'
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы