function tempFun() { this.val1 = "this.var1"; var val2 = "var var2"; //locally scoped var, not added to function instance nor to the prototype this.getLocalVar = function(){ return val2; }; this.setLocalVar = function (arg) { val2 = arg; }; } tempFun.prototype.val3 = "fun.proto.var3"; tempFun.val4 = "fun.var4"; var objTempFun1 = new tempFun(); var objTempFun2 = new tempFun(); /*----------------------------------------------------------------------- Variables defined as `this.variableName` 1. Are declared on prototype 2. Have separate values across instances 3. Cannot be accessed on function itself -----------------------------------------------------------------------*/ document.write("<br />obj1-this.var1: " + objTempFun1.val1 + "<br />"); document.write("obj2-this.var1: " + objTempFun2.val1 + "<br />"); document.write("fun-this.var1: " + tempFun.val1 + "<br />"); objTempFun1.val1 = "this.var1x"; objTempFun2.val1 = "this.var1y"; document.write("obj1-this.var1: " + objTempFun1.val1 + "<br />"); document.write("obj2-this.var1: " + objTempFun2.val1 + "<br />"); /*----------------------------------------------------------------------- Variables defined inside function as `var variableName` 1. Are closure-scoped; defined neither on function nor on prototype 2. Have separate values across function instances 3. Can only be accessed through function instance by adding methods on a prototype (as above getLocalVar and setLocalVar methods) -----------------------------------------------------------------------*/ document.write("obj1-var var2: " + objTempFun1.val2 + "<br />"); document.write("obj2-var var2: " + objTempFun2.val2 + "<br />"); document.write("fun-var var2: " + tempFun.val2 + "<br />"); document.write("obj1-printLocalVar: " + objTempFun1.getLocalVar() + "<br />"); document.write("obj2-printLocalVar: " + objTempFun2.getLocalVar() + "<br />"); objTempFun1.setLocalVar("var var2x"); objTempFun2.setLocalVar("var var2y"); document.write("obj1-printLocalVar: " + objTempFun1.getLocalVar() + "<br />"); document.write("obj2-printLocalVar: " + objTempFun2.getLocalVar() + "<br />"); /*----------------------------------------------------------------------- Variables defined as `functionName.prototype.variablename` 1. Are declared on prototype 2. Have separate values across function instances 3. Cannot be accessed on function itself -----------------------------------------------------------------------*/ document.write("obj1-this.proto.var3: " + objTempFun1.val3 + "<br />"); document.write("obj2-this.proto.var3: " + objTempFun2.val3 + "<br />"); document.write("fun-this.proto.var3: " + tempFun.val3 + "<br />"); objTempFun1.val3 = "fun.proto.var3x"; objTempFun2.val3 = "fun.proto.var3y"; document.write("obj1-this.proto.var3: " + objTempFun1.val3 + "<br />"); document.write("obj2-this.proto.var3: " + objTempFun2.val3 + "<br />"); /*------------------------------------------------------------------------ Variables defined as `functionName.variablename` 1. Become member of function (or say 'F'unction instance, which is tempFun) not the function instances (which are objTempFun1 & objTempFun2 above) 2. Cannot be accessed on function instances ------------------------------------------------------------------------*/ document.write("obj1-fun.var4: " + objTempFun1.val4 + "<br />"); document.write("obj2-fun.var4: " + objTempFun2.val4 + "<br />"); document.write("fun-fun.var4: " + tempFun.val4 + "<br />");