Path: csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!feeder.erje.net!eu.feeder.erje.net!newsfeed.datemas.de!uucp.gnuu.de!newsfeed.arcor.de!newsspool1.arcor-online.net!news.arcor.de.POSTED!not-for-mail Content-Type: text/plain; charset="UTF-8" Message-ID: <1476035.p2tWUPlOUs@PointedEars.de> From: Thomas 'PointedEars' Lahn Reply-To: Thomas 'PointedEars' Lahn Organization: PointedEars Software (PES) Date: Mon, 10 Feb 2014 14:53:33 +0100 User-Agent: KNode/4.11.3 Content-Transfer-Encoding: 8Bit X-Face: %i>XG-yXR'\"2P/C_aO%~;2o~?g0pPKmbOw^=NT`tprDEf++D.m7"}HW6.#=U:?2GGctkL,f89@H46O$ASoW&?s}.k+&. MIME-Version: 1.0 Lines: 66 NNTP-Posting-Date: 10 Feb 2014 14:53:35 CET NNTP-Posting-Host: 0853930f.newsspool2.arcor-online.net X-Trace: DXC=jS4@PPP\Q1j016@cHD@m;jA9EHlD;3Ycb4Fo<]lROoRa8kF On a job interview, I've been asked to defined an object with a private > variable and getter/setter for this private variable. > > I chose the following: > > var obj = function() { > var private; > > this.setPrivate(val) { > private = val; > } > > this.getPrivate() { > return private; > } > }; > > > When I've finished to implement the object the interviewer told me there > are some problems\cons with this object and those "problems" are not the > setter/getter functions. > > I've been asked to point out those flaws, but I couldn't. > > Does anyone can point out the flaws in the object? This program is syntactically in error, which you would have known if you had tried to run it before you asked. If one mentally corrected the syntax errors, it would still be *semantically* in error, which you had known if you knew the first thing about these languages: “obj” would refer to a *Function* instance that, when called in non-strict mode, returned “undefined”; a function that, when called in strict mode, would throw a ReferenceError exception because “this” would be “undefined”. The correct code – also called the Module Pattern – is var obj = (function () { /* The underscore for privates is a matter of preference only */ var _private; return { setPrivate: function (val) { _private = val; }, getPrivate: function () { return _private; } }; }()); You should not consider applying for another job of this kind before you have understood and can explain in correct terminology why this is the correct code. This is _not_ “JavaScript 101”. Do your own homework. -- PointedEars Twitter: @PointedEars2 Please do not Cc: me. / Bitte keine Kopien per E-Mail.