clark Posted February 25, 2014 Share Posted February 25, 2014 In actionscript you would get an error if you tried to call a method of an object which did not exist and I am guessing JS is the same. function destroy(): void{ this._apple.destroy() //error, you cannot call destroy() because this._apple is null or undefined}So what I end up doing was this which worked for a decade: function destroy(): void{ if (this._apple != null) { this._apple.removeEventsBlah... this._apple.destroy(); this._apple = null; } }But this feels primitive. When you have like 12 class members, and you got to check if they are null.Apart from that, I read this is not accurate for JS? I should use typeof?So if typeof variable === "undefined" Basically, how do you correctly destroy objects? Is it merely enough in JS just to null it.... this._apple = null. I am not sure how stuff works without a virtual machine doing garbage collection where it is important to remove all listeners/references while I am struggling to figure out what is null in relation to undefined. Link to comment Share on other sites More sharing options...
away168 Posted February 25, 2014 Share Posted February 25, 2014 Yes it is enough just to set it to null if you want it empty. Do not set it to undefined. Undefined is, of what I've known:1. What is thrown when your variable is not initialized (var a;)2. Calling an out of bounds array elements (a[5] when array length is actually 4)3. Getting a value where a function doesn't return a value.4. Passing parameter when it is not passed any value (function myMethod(a, b ) {} --> usage: myMethod(5), then b is undefined). It is preferable, even if possible, not to use any uninitialized variables for any use (including typeof), in this case "undefined", until you assign it with value, which is at least a null value. Regarding to your garbage collection issue, when the object is no longer used/have no reference whatsoever, it will be taken care by JavaScript, even if you don't set it to null. For example, you have a Human object that has a Hand object. When you set a human object variable to null, then Hand object will be garbage collected without you needing to destroy it in Human's destructor like C++, nor you need to manually call "human.cleanUp()" to set that hand object to null.This is just the same as ActionScript, C#, and Java. The only way to manage this automatic garbage collection is how you manage your variables around the application without losing them, like using object pooling. clark and Teemu-Tor 2 Link to comment Share on other sites More sharing options...
clark Posted February 25, 2014 Author Share Posted February 25, 2014 Really great response Alectora! Thanks. Link to comment Share on other sites More sharing options...
Recommended Posts