Path: csiph.com!usenet.blueworldhosting.com!feeder01.blueworldhosting.com!feeder.erje.net!1.eu.feeder.erje.net!news.roellig-ltd.de!open-news-network.org!weretis.net!feeder1.news.weretis.net!news.solani.org!.POSTED!not-for-mail From: Thomas 'PointedEars' Lahn Newsgroups: comp.lang.javascript Subject: Re: Scope of "this" variable Date: Wed, 30 Dec 2015 00:42:45 +0100 Organization: PointedEars Software (PES) Lines: 39 Message-ID: <2541123.lcmPiflTUf@PointedEars.de> References: <87ziwtqc9t.fsf@mithlond.arda> Reply-To: Thomas 'PointedEars' Lahn Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8Bit X-Trace: solani.org 1451432566 15489 eJwFwQcBwDAMAzBKufYKp83hD2FSOhTFQCJyczuaX+mu8D59NXdd/dDDJc2sbKRBoRwOLH4johCV (29 Dec 2015 23:42:46 GMT) X-Complaints-To: abuse@news.solani.org NNTP-Posting-Date: Tue, 29 Dec 2015 23:42:46 +0000 (UTC) User-Agent: KNode/4.14.2 X-User-ID: eJwNx8kBwDAIA7CZIDbHOBDC/iO0+onHxK7DaOByW4Sr4EkVrenGzk48KdSfxks3ZQY9dFLWn6NqNobMax9bLhXV Cancel-Lock: sha1:FGh6HhadaX2Ngp8gxDzgYhi2qgA= X-NNTP-Posting-Host: eJwNx8EBwEAEBMCWCLuhHO7ov4RkfgOj8rxO0LHYPzG5/uDW9g3YWVPLnikIkTcbGynFURH/ACm2ETw= Xref: csiph.com comp.lang.javascript:29070 Joao Rodrigues wrote: > On 29/12/2015 19:38, Joao Rodrigues wrote: >> On 29/12/2015 17:34, Teemu Likonen wrote: >>> I know a work-around: >>> >>> var Item = function() { >>> this.variable = "variable"; >>> this.fn1 = function() { return this.variable; }; >>> var this_object = this; >>> this.foo = { >>> fn2: function() { return this_object.variable; } >> ^^^^^^^^^^^^ >> >> Oops, this is something else, not a workaround, as this_object >> references Item.variable, not foo.variable as in the previous case. > > Oops again :-) I meant "as this_object.variable" references > Item.variable..." Nonsense. “this” in the context of “Item”, therefore “this_object” too, refers to - the global object if the object referred to by “Item” (“Item”) is called as a global function in non-strict mode (in strict mode, “this” would be “undefined”) - the constructed Item instance if “Item” is called as a constructor - the object that “Item” was called as a function of through method transfer (“target.method = source.method; target.method(…)”), or use of Function.prototype.call(), Function.prototype.apply() (both since ES 3), or Function.prototype.bind() (since ES 5.x). -- PointedEars FAQ: | SVN: Twitter: @PointedEars2 | ES Matrix: Please do not cc me. / Bitte keine Kopien per E-Mail.