Есть такая структура (которую желательно бы не менять кардинально):
var wrapper1 = function ()
{
var wrapper2 = function ()
{
return Math.PI;
};
};
Пробовал через var caller = new wrapper1; вызвать так caller.wrapper2(), но возвращает undefined.
Подскажите как быть, пожалуйста. Не получается никак понять ооп в js.
Замените var wrapper2 = ... на this.wrapper2 = ....
Когда вы пишете var внутри функции, то эта переменная (которая ссылается на функцию) видна только внутри функции. Если же вы обращаетесь к this (в случае javascript при создании нового экземпляра объекта через new somefunction() this внутри этой самой функции-конструктора указывает на созданный объект.
Тогда через this.wrapper2 = ... вы создаете новое поле в объекте и кладете в него свою функцию.
Конечно, ведь wrapper2 - приватная переменная; она существует только во время выполнения функции (или в замыкании, чего тут нет).
Используйте this:
var wrapper1 = function ()
{
this.wrapper2 = function ()
{
return Math.PI;
};
}
var caller = new wrapper1;
console.info(caller.wrapper2());
Продвижение своими сайтами как стратегия роста и независимости