Size: a a a

JavaScript Noobs — сообщество новичков

2020 June 09

М

Максим in JavaScript Noobs — сообщество новичков
Andrey Govorukhin
так глядишь скоро все браузеры на хромиум переедут
Вродь как только 2 браузера осталось не на хромиуме - мазила и сафари, остальные на хромиуме
источник

AS

Andrew Summers in JavaScript Noobs — сообщество новичков
Добрый вечер в пост-короновирусном мире!

Подскажите, пожалуйста, почему в данном примере "publicTest" можно использовать в качестве property для budgetController - https://codepen.io/AndyGol/pen/JjGYQVJ?editors=1111
источник

D

Danila in JavaScript Noobs — сообщество новичков
Andrew Summers
Добрый вечер в пост-короновирусном мире!

Подскажите, пожалуйста, почему в данном примере "publicTest" можно использовать в качестве property для budgetController - https://codepen.io/AndyGol/pen/JjGYQVJ?editors=1111
А почему нет?
источник

D

Danila in JavaScript Noobs — сообщество новичков
Andrew Summers
Добрый вечер в пост-короновирусном мире!

Подскажите, пожалуйста, почему в данном примере "publicTest" можно использовать в качестве property для budgetController - https://codepen.io/AndyGol/pen/JjGYQVJ?editors=1111
Кстати, у тебя очень старый учебник (статья/урок)
источник

AS

Andrew Summers in JavaScript Noobs — сообщество новичков
Danila
А почему нет?
Я новичок, поэтому у меня сейчас мышление не "а почему бы нет", а именно "а как он это сделал" ;)

Соответственно, у нас есть анонимный объект, у которого есть одна property. Этот объект создается в блоке return. Я не понимаю, почему эта property становится доступной для использования в качестве property для внешней функции budgetController.
источник

AS

Andrew Summers in JavaScript Noobs — сообщество новичков
Danila
Кстати, у тебя очень старый учебник (статья/урок)
я действительно использую старую версию видеокурса. Сейчас перейду на обновленную версию.
источник

ГЩ

Глеб Щукин in JavaScript Noobs — сообщество новичков
Andrew Summers
Добрый вечер в пост-короновирусном мире!

Подскажите, пожалуйста, почему в данном примере "publicTest" можно использовать в качестве property для budgetController - https://codepen.io/AndyGol/pen/JjGYQVJ?editors=1111
это замыкания, старая реализация паттерна "модуль"
источник

ГЩ

Глеб Щукин in JavaScript Noobs — сообщество новичков
источник

ГЩ

Глеб Щукин in JavaScript Noobs — сообщество новичков
вот тут похожий на твой пример разобран
источник

D

Danila in JavaScript Noobs — сообщество новичков
Andrew Summers
Я новичок, поэтому у меня сейчас мышление не "а почему бы нет", а именно "а как он это сделал" ;)

Соответственно, у нас есть анонимный объект, у которого есть одна property. Этот объект создается в блоке return. Я не понимаю, почему эта property становится доступной для использования в качестве property для внешней функции budgetController.
1) Значением BudgetController становится то, что вернёт анонимная функция, это называется iife, "немедленно выполненое функциональное выражение", то есть, была объявлена анонимная функция и тут же выполнена, а то, что она вернула было присвоено переменной BudgetController
2) Теперь к тому, что эта функция делает. Она возвращает объект с одним методом, publicTest
3) Исходя из п.1 в переменной BudgetController лежит объект с одним методом publicTest
4) Ты его и вызываешь BudgetController.publicTest()
5) Функция add не содержалась в объекте, который был возвёрнут из iife, следовательно, её нет в обхекте, который лежит в BudgetController, следовательно, ты и не можешь его вызвать через BudgetController.add()
источник

D

Danila in JavaScript Noobs — сообщество новичков
Если убрать iife для простоты, получится вот что

function CreateBudgetController(){
  let x = 0;
  function add(a){return x+a;}
  return {
    publicTest: function(b) {
     console.log(add(b))
    }
  }
}

const budgetController = CreateBudgetController();
budgetController.publicTest();
источник

D

Danila in JavaScript Noobs — сообщество новичков
У тебя это просто собрано в один IIFE
источник

AS

Andrew Summers in JavaScript Noobs — сообщество новичков
Danila
1) Значением BudgetController становится то, что вернёт анонимная функция, это называется iife, "немедленно выполненое функциональное выражение", то есть, была объявлена анонимная функция и тут же выполнена, а то, что она вернула было присвоено переменной BudgetController
2) Теперь к тому, что эта функция делает. Она возвращает объект с одним методом, publicTest
3) Исходя из п.1 в переменной BudgetController лежит объект с одним методом publicTest
4) Ты его и вызываешь BudgetController.publicTest()
5) Функция add не содержалась в объекте, который был возвёрнут из iife, следовательно, её нет в обхекте, который лежит в BudgetController, следовательно, ты и не можешь его вызвать через BudgetController.add()
Мне все понятно, за исключением пункта 3.

Получается вот так:

А. Есть переменная budgetController - понятно
Б. Есть анонимный объект, созданный через return и содержающий один method - publicTest - понятно.
В. Каким образом в JS имеется возможность взять переменную budgetController и присвоить ей method от внутреннего объект - вот это не понятно.
источник

D

Danila in JavaScript Noobs — сообщество новичков
Andrew Summers
Мне все понятно, за исключением пункта 3.

Получается вот так:

А. Есть переменная budgetController - понятно
Б. Есть анонимный объект, созданный через return и содержающий один method - publicTest - понятно.
В. Каким образом в JS имеется возможность взять переменную budgetController и присвоить ей method от внутреннего объект - вот это не понятно.
Значит, ты не понял п.1
источник

D

Danila in JavaScript Noobs — сообщество новичков
Смотри
источник

AS

Andrew Summers in JavaScript Noobs — сообщество новичков
Danila
У тебя это просто собрано в один IIFE
по этому вопросу все ок - вопрос именно по сообщению от 18:17.
источник

D

Danila in JavaScript Noobs — сообщество новичков
function createObject(){
   return {someMethod(){}}
}

const a = createObject();

Теперь в a лежит то, что вернул createObject();
А вернул он объект
источник

D

Danila in JavaScript Noobs — сообщество новичков
Это понятно?
источник

D

Danila in JavaScript Noobs — сообщество новичков
Давай даже так
источник

D

Danila in JavaScript Noobs — сообщество новичков
function createObject(){
   return {
     a:1, b:2, c:3
   }
}

const a = createObject();

a.a//1
a.b//2
a.c//3
источник