Как создавать функции внутри функций с использованием прототипов в javaScript

Я просто хочу создать функции внутри функции, к которой можно получить доступ в следующем формате (например, в jquery): mainFunction().childFunction(); Я думаю, что этого можно достичь с помощью прототипов, но я не знаю, как это сделать. Спасибо.

Ваша выделенная строка может быть просто функцией, которая возвращает объект, на котором есть ключ childFunction, то есть функция.

Taplar 01.05.2018 19:12

Возможный дубликат stackoverflow.com/questions/22541712/…

Ason 01.05.2018 19:12

Изучите несколько руководств. Stackoverflow не является обучающей службой. Интернет полон учебных ресурсов. См. Сколько исследовательских усилий ожидается от пользователей Stack Overflow?

charlietfl 01.05.2018 19:14

на самом деле я пробую что-то вроде funOne().funTwo(), а не objectOne.functionOne(). Как будто это в jQuery $("selector").ready(). спасибо.

sahil 01.05.2018 19:16

Дело в том, что вторая функция вызывается из объекта, независимо от того, существует ли этот объект вне функции или будет возвращен функцией и вызовом в цепочке, вы вызываете вторую функцию из некоторого объекта. Откуда это взялось - это более мелкая деталь.

Taplar 01.05.2018 19:17
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
5
49
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

mainFunction должен вернуть то, что имеет childFunction(). Точка просто обращается к свойству возвращаемого значения. Например:

function mainFunction() {
  console.info('mainCalled')
  return {
    childFunction() {
      console.info("childCalled")
      return this
    },
    someOtherFunction() {
      console.info("someother called")
      return this
    }
  }
}

mainFunction().childFunction()
mainFunction().someOtherFunction()
mainFunction().childFunction().someOtherFunction()
Спасибо это очень помогло, но это работает только для одной функции, например, я хочу иметь более одной функции в mainFunction(), например, если я хочу mainFunction().one();mainFunction().two(); и до mainFunction().n(), что я могу сделать.
sahil 01.05.2018 19:27

возвращаемый объект из mainFunction должен содержать любой метод, который вы хотите вызвать, связанный с вызовом mainFunction.

Taplar 01.05.2018 19:33

Поскольку я студент, я не могу понять, что вы пытаетесь сказать, пожалуйста, просто дайте и блокируйте код, тогда я могу понять, и спасибо за ваш интерес.

sahil 01.05.2018 19:35

@Taplar верен - объекту просто нужны дополнительные свойства, например, см. Обновленный код.

Mark 01.05.2018 19:36

Если вы посмотрите на ответ, метод возвращает { childFunction() {} }, который фактически создает { childFunction: function () {} }, который является объектом с одним ключом childFunction, который имеет значение функции, которая может быть вызвана. Если вы хотите, чтобы было доступно больше функций, как и любой другой объект javascript, вы можете добавить дополнительные пары ключ-значение, разделив их запятыми. { thing1: value1, thing2: value2 } Значения в данном случае являются определениями функций.

Taplar 01.05.2018 19:37

хорошо, спасибо, но я не могу понять, что возвращается, это массив или объект. Как это называется?

sahil 01.05.2018 19:38

Основная функция возвращает объект. Вот что означает {}.

Mark 01.05.2018 19:39

Это объект. {} в javascript обозначает определение объекта, которое представляет собой элемент с парами ключ-значение. Массив в javascript обозначается [] и имеет числовые ключи, отражающие индекс в массиве.

Taplar 01.05.2018 19:39

нет, я думал, что это массив, потому что в объектах они похожи на {property:sasa,propertyTwo:ssgsgwf}, но похожи на смесь массива и объекта.

sahil 01.05.2018 19:45

может ли кто-нибудь сказать мне, почему мы не используем ключевое слово function для всех функций, которые возвращаем в объекте.

sahil 04.05.2018 15:35

Для того чтобы объединяемые в цепочки функции должны знать только свой контекст определения. Я не согласен с утвержденным ответом. Если вам нужно объединить несколько функций в цепочку, и каждая функция должна возвращать область видимости с несколькими методами, которые также должны быть объединены в цепочку, вы получите очень трудный для чтения фрагмент кода или так называемый спагетти-код.

Таким образом, простое решение состоит в том, что все функции, определенные как объединяемые в цепочку, разделяют область определения, а затем каждая из этих функций возвращает контекст определения или области действия. Контекст определения может быть любым, от самого window до объекта или даже функции.

var context = this;

function foo() {
   // some code execution
   return context;
}

function bar() {
    // some code execution
    return context;
}

function baz() {
    // some code execution
    return context;
}

// chained together 
foo().bar().baz();

Результат тот же, но при таком подходе вы получите более чистый и удобный в сопровождении код.

Надеюсь, вам может помочь и другая точка зрения.

Другие вопросы по теме