Извне объектного литерала foo, как вызвать внутреннюю функцию метода внутри foo? (См. Код ниже)

#javascript #function #object #methods

#javascript #функция #объект #методы

Вопрос:

 let foo={
  name:"",
  method:function(){
    function bar(){
      return "bar";
    }
    //bar();   //(2)
  }
};
foo.method.bar(); //(1)  

(1): выдает неперехваченную ошибку типа: c.method.bar не является функцией, я знаю foo.method.bar , что она ищет ключ / имя свойства, вызываемое bar внутри method , но этого не существует, так как же мне вызвать bar при доступе извне foo , не делая этого (2)

Ответ №1:

Учитывая ваш текущий код, это невозможно, потому что после вызова ничего со ссылкой на bar остается method , и потому method bar что сам себя тоже не вызывает.

Если вы хотели что-то подобное, поместите bar внешний объект, чтобы он был открыт:

 let foo = {
  name: "",
  bar() {
    return "bar";
  },
  method: function() {

  }
};
console.log(foo.bar());  

Теоретически было бы возможно поместить bar функцию непосредственно в method , но это было бы довольно странно:

 let foo = {
  name: "",
  method: function() {

  }
};
foo.method.bar = function() {
  return "bar";
};
console.log(foo.method.bar());  

Комментарии:

1. because nothing with a reference to bar remains after method is called О да, потому что контекст выполнения bar уже завершен после вызова метода. foo.method.bar Это то же самое, что method: { bar:function(){return bar;}}