Вызвать функцию в функции

340
03 февраля 2017, 06:49

Есть такая структура (которую желательно бы не менять кардинально):

var wrapper1 = function ()
{
    var wrapper2 = function ()
    {
        return Math.PI;
    };
};

Пробовал через var caller = new wrapper1; вызвать так caller.wrapper2(), но возвращает undefined.
Подскажите как быть, пожалуйста. Не получается никак понять ооп в js.

Answer 1

Замените var wrapper2 = ... на this.wrapper2 = .... Когда вы пишете var внутри функции, то эта переменная (которая ссылается на функцию) видна только внутри функции. Если же вы обращаетесь к this (в случае javascript при создании нового экземпляра объекта через new somefunction() this внутри этой самой функции-конструктора указывает на созданный объект. Тогда через this.wrapper2 = ... вы создаете новое поле в объекте и кладете в него свою функцию.

Answer 2

Конечно, ведь wrapper2 - приватная переменная; она существует только во время выполнения функции (или в замыкании, чего тут нет).
Используйте this:

var wrapper1 = function () 
{ 
    this.wrapper2 = function () 
    { 
        return Math.PI; 
    }; 
} 
 
var caller = new wrapper1; 
console.info(caller.wrapper2());

READ ALSO
Плавность при scroll'е

Плавность при scroll'е

Здравствуйте

577
AngularJS: Как записать данные в JSON файл? [требует правки]

AngularJS: Как записать данные в JSON файл? [требует правки]

Подскажите как записать данные в JSON файл? Мне нужно, чтобы после заполнения полей и нажатия на кнопку Save данные сохранялись в JSON файле

398
Как работает NPM модуль request-promise

Как работает NPM модуль request-promise

Подключил модуль request-promiseДля отправки файла использую вот такой код

520
Спрятать элемент с помощью скрипта

Спрятать элемент с помощью скрипта

Есть этот элементКак мне ему сделать display none, если data-date="2017-02-30"

375