Szabolcs
Szabolcs

Reputation: 1533

How to call a function from an object, from within an other function's function of the same object in javascript?

I've an object, which simplified a bit looks like:

function obj(arg){
    return{
        fct1: function(){
            $(".output").append("called fct1 with arg: "+arg+"<br>");
        },
        fct2: function(){
            $(".output").append("called fct2, which has an other function, which calls fct1<br>");
            fct2a();
            function fct2a(){
                $(".output").append("doing something else, then calling fct1<br>");
                this.fct1(); //not within scope
            }
        }
        }
    }
var myobj = obj("asd");
myobj.fct2();

I want to call fct1 from fct2a, how? Fiddle

Upvotes: 2

Views: 49

Answers (2)

LostMyGlasses
LostMyGlasses

Reputation: 3144

You can also declare fct1() separately and invoke it where you need it:

function obj(arg){
    function innerFct1(arg) {
        $(".output").append("called fct1 with arg: "+arg+"<br>");
    }
    return{
        fct1: innerFct1,
        fct2: function(){
            $(".output").append("called fct2, which has an other function, which calls fct1<br>");
            fct2a();
            function fct2a(){
                $(".output").append("doing something else, then calling fct1<br>");
                innerFct1("arg2"); //not within scope
            }
        }
    }
}
var myobj = obj("asd");
myobj.fct2();

Upvotes: 0

Kishore Indraganti
Kishore Indraganti

Reputation: 1322

Create a temp var and asign this object to that var and call from that. Please find the code below

function obj(arg){
    return{
        var temp=this;
        fct1: function(){
            $(".output").append("called fct1 with arg: "+arg+"<br>");
        },
        fct2: function(){
            $(".output").append("called fct2, which has an other function, which calls fct1<br>");
            fct2a();
            function fct2a(){
                $(".output").append("doing something else, then calling fct1<br>");
                temp.fct1(); 
            }
        }
        }
    }
var myobj = obj("asd");
myobj.fct2();

Upvotes: 3

Related Questions