JScipt Constuctor

I don't understand javascipt constructors!
I want an object with nested functions which takes a param in its creation, and that param is avail within the functions, e.g.
function ImLIBObject(colorToUse) {
        this.colorToUse = colorToUse;
   function ImNestedProc(e, oRow) {
       I want colorToUse here!!, i can't seem to get it, its undefined!!!
        }     

Open in new window

Silas2Asked:
Who is Participating?
 
hieloCommented:
Instead of:
function ImNestedProc(e, oRow){...}
you need to use the name of the function as a variable and assign it an anonymous function.
this.ImNestedProc=function (e, oRow){...};

You prefix it with "this." so that you can access it as a public method.
function ImLIBObject(colorToUse) {
        this.colorToUse = colorToUse;
	this.ImNestedProc=function (e, oRow) {
       alert( this.colorToUse );
        }
}

var x=new ImLIBObject('red')
x.ImNestedProc();

Open in new window


Another way to do this is to "attach" the function to the prototype chain:
//method
ImLIBObject.prototype.ImNestedProc=function(e, oRow) {
       alert( this.colorToUse );
}

//constructor
function ImLIBObject(colorToUse) {
        this.colorToUse = colorToUse;
}

var x=new ImLIBObject('red')
x.ImNestedProc();

Open in new window


With option 1, every time you create an instance of the object, each instance has its own copy/definition of the method.  With option 2, only one copy/definition of the method exists at any time regardless of how many instances of the object you create.

These should help you understand prototypes:
http://sporto.github.io/blog/2013/02/22/a-plain-english-guide-to-javascript-prototypes/
http://stackoverflow.com/questions/572897/how-does-javascript-prototype-work
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.