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

    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)
    Ответ написан
    1 комментарий
  • Как выводить default value для object?

    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'
    Ответ написан
    1 комментарий