Могу ли я получить доступ к экземпляру модуля экспорта самостоятельно?

1

Скажем, что у меня есть этот код:

module.exports = {
   head: {
     title: "Some title"
   }
}

Могу ли я получить доступ к этому головному объекту внутри module.export, т.е.

module.exports = {
   head: {
     title: "Some title"
   },
   test: function() {
     return this.head.title
   }
}

спасибо за помощью.

  • 0
    Что вы можете. Но убедитесь, что test всегда вызывается как метод модуля
  • 0
    Посмотрите на stackoverflow.com/questions/10711064/…
Показать ещё 2 комментария
Теги:
ecmascript-6
module

1 ответ

1

Вы можете использовать Bind вне функции для поддержания ссылки.

var module = {};
module.exports = {
  head: {
    title: "Some title"
  },
  test: function() {
    return this.head.title
  }
}

var title = module.exports.test.bind(module.exports);
console.log(title());

или вы можете использовать применение внутри функции для поддержания ссылки.

var module = {};
module.exports = {
  head: {
    title: "Some title"
  },
  test: function() {
    return hit.apply(module.exports.head)

    function hit() {
      return this.title;
    }
  }
}

console.log(module.exports.test());

И если вы хотите изменить название, вы можете использовать класс.

var module = {};
class Update {
  constructor(a, b) {
    this.module = a;
    this.string = b;
  }
  get titles() {
    return this.module.exports = {
      head: {
        title: this.string || "I'm sooo defualt"
      },
      test: function() {
        return hit.apply(module.exports.head)

        function hit() {
          return this.title;
        }
      }
    }
  }
}


const newString = new Update(module, 'no way brah');
const allTheWay = new Update(module, 'all the way brah');
console.log(newString.titles.test());
console.log(allTheWay.titles.test());
const defaults = new Update(module);
console.log(defaults.titles.test());
console.log('I am with the last guy,', module.exports.test());

И если у вас нет класса.

var module = {};
module.exports = {
  head: {
    title: "Some title"
  },
  test: function() {
    return hit.apply(module.exports.head)

    function hit() {
      return this.title;
    }
  }
}

module.exports.head.title= 'hello world';

console.log(module.exports.test());
 
  • 0
    Итак, как я могу установить новое значение для заголовка, это возможно?
  • 1
    @lukas да, возможно, обновлю ответ, когда я получу изменение
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню