jimfog Posted May 4, 2014 Share Posted May 4, 2014 Globals are bad...we know that. But if I want to make available to a function the variable from another function what can I do. Is the answer to use this variable as an argument? Is there any other way? Link to comment Share on other sites More sharing options...
Hadien Posted May 4, 2014 Share Posted May 4, 2014 (edited) You're confused. Globals aren't bad, never were. Its the act of abusing Globals (and how easy people can do so) that is bad. Globals is a necessary part in nearly all languages. That said, if you can get away with avoiding the Global scope then its often for the best. Using Globals when other options are exhausted is completely fine, you just need to keep track of them better. Anyway, your question can solved either with scoping or via the use of accessor methods. Scoping: You can wrap both functions and the variable into one object, all defined in the same scope your functions and variables are all grouped together and only the "myobject" touches the global scope: var myobject = {myvariable:0,One:function (){this.myvariable+=1;console.log(this.myvariable);},Two:function (){this.myvariable+=2;console.log(this.myvariable);},};//outputs "1" in consolemyobject.One();//outputs "3" in consolemyobject.Two(); accessor: You can have object 'A' with the variable 'count', function 'One', and has a getter method 'getCount' while the other function (which belongs in object 'B') can simply use A.getCount() to get the count. var A = {count:0,One:function(){count++;},getCount:function(){return this.count}setCount:function(x){this.count = x}}var B = {Two: function(){ var c = A.getCount()+2; A.setCount(c);}} There is a more stable way of writing getters and setters, but its a bit more verbose than I need to be for this simple example. you can read up on MDN about defineProperty and defineProperties Which option you should best use (Scoping vs. getters) depends on how the two functions relate to each other. Edited May 4, 2014 by Hadien Link to comment Share on other sites More sharing options...
jimfog Posted May 4, 2014 Author Share Posted May 4, 2014 Well the problem in my case is that the code is found in a plugin(I mean is not my code) and I am trying to find a way to mess things as little as possible. Link to comment Share on other sites More sharing options...
davej Posted May 4, 2014 Share Posted May 4, 2014 jfog = {};//namespace jfog.val1 = 0; But... how do you do this for jQuery? Link to comment Share on other sites More sharing options...
Hadien Posted May 5, 2014 Share Posted May 5, 2014 I'm not sure I follow. jqeury is merely a framework, you could use the examples I made above alongside them. unless you mean specific objects created inside jquery well you can extend those objects with $.(origObject, extendingObject). or, for example with jQueryUI, use Widget Factory (view source). Writting accessor methods for them. I've written a UI Widget example before on the site a while back for a specific user. I didn't write any accessor methods per se in that example, but I could have easily done something like: getCurrent:function(){ return this.currentTooltip}, Link to comment Share on other sites More sharing options...
jimfog Posted May 5, 2014 Author Share Posted May 5, 2014 Anyway...this is the plugin http://arshaw.com/fullcalendar/ and this is the file where modifications must be done https://onedrive.live.com/?cid=BE27434B2AAC8130&id=BE27434B2AAC8130%21321 It has nothing to do with jquery. Link to comment Share on other sites More sharing options...
davej Posted May 5, 2014 Share Posted May 5, 2014 Maybe... if (typeof jfog === 'undefined'){var jfog = {};//project namespace}else{alert('Namespace conflict');throw {name:'error',message:'Namespace conflict'};} Link to comment Share on other sites More sharing options...
thescientist Posted May 5, 2014 Share Posted May 5, 2014 there are a number of patterns to address the topic of dealing with globals. namespace, module, and sandbox patterns come to mind. https://www.google.com/search?q=namespace+pattern&oq=namespace+pattern&aqs=chrome..69i57j0l5.3149j0j7&sourceid=chrome&es_sm=119&ie=UTF-8 Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now