Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.javascript > #29065
| Path | csiph.com!usenet.blueworldhosting.com!feeder01.blueworldhosting.com!feeder.erje.net!1.eu.feeder.erje.net!weretis.net!feeder4.news.weretis.net!feeder1.news.weretis.net!news.solani.org!.POSTED!not-for-mail |
|---|---|
| From | Thomas 'PointedEars' Lahn <PointedEars@web.de> |
| Newsgroups | comp.lang.javascript |
| Subject | Re: Scope of "this" variable |
| Date | Tue, 29 Dec 2015 22:09:16 +0100 |
| Organization | PointedEars Software (PES) |
| Lines | 65 |
| Message-ID | <1477065.DiSW4fkXl8@PointedEars.de> (permalink) |
| References | <87ziwtqc9t.fsf@mithlond.arda> |
| Reply-To | Thomas 'PointedEars' Lahn <cljs@PointedEars.de> |
| Mime-Version | 1.0 |
| Content-Type | text/plain; charset="UTF-8" |
| Content-Transfer-Encoding | 8Bit |
| X-Trace | solani.org 1451423357 15008 eJwFwYEBACAEBMCVqPcYJ8r+I3Rnm8p20AgbG4RufyAQfRnoSkXG6bvERZ5orhajJqpO4AP/2RAR (29 Dec 2015 21:09:17 GMT) |
| X-Complaints-To | abuse@news.solani.org |
| NNTP-Posting-Date | Tue, 29 Dec 2015 21:09:17 +0000 (UTC) |
| User-Agent | KNode/4.14.2 |
| X-User-ID | eJwVx9sBwEAEBMCWzmFRjkf0X0KSvxllENoECtHVHRma4eP3Sft9ExrRRXSsNegKbYErx92w6I02/wqpbH0BV0AV8w== |
| Cancel-Lock | sha1:onhDyw/6z/mAZd2GP5DeFQ2iKf8= |
| X-NNTP-Posting-Host | eJwNysERwDAIA7CVSsEmjFNCvP8IzVN3gtO4MwgGBMXLOrsc6pjOb5sd3aIxDJd1Pyr1tefk8h8oQxGi |
| Xref | csiph.com comp.lang.javascript:29065 |
Show key headers only | View raw
Teemu Likonen wrote:
> var Item = function() {
> this.variable = "variable";
> this.fn1 = function() { return this.variable; };
> this.foo = {
> fn2: function() { return this.variable; }
> };
> };
>
> var item1 = new Item();
> console.log(item1.fn1());
> console.log(item1.foo.fn2());
>
> prints this:
>
> "variable"
> undefined
>
> So function item1.fn1 returns the string "variable" but function
> item1.foo.fn2 returns undefined. The variable "this" somehow disappears
> (or doesn't last long enough) when a function object is created inside
> another object {...}.
“this” is not a variable; it is a value. And it does not appear or
disappear at all.
> Why?
You have stored in “this.foo” a reference to an object (here: an Object
instance, created with the Object initialiser, “{}”). “this” is only
resolved when a function or method is called, and the object referred to by
“this.foo” (on which you are calling the “fn2” method) neither has nor
inherits a property named “variable”. Accessing a non-existing property
usually (without Proxy) yields the “undefined” value of the Undefined type.
> 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; }
> };
> };
Yes, that is a proper workaround. People also use “that” or “self” instead
of the longer “this_object”.
However, unless you are actually referring to a variable declared in the
local context of the constructor (which can be understood as a private
property since only the public methods of the instance or its prototype, if
defined within the constructor, can access it – they are then called
“privileged”), or the method changes significantly depending on the
constructor call in some other way, you should avoid defining public methods
in the constructor and define them as prototype methods instead, saving
memory (at the expense of runtime efficiency due to the prototype chain
lookup).
--
PointedEars
FAQ: <http://PointedEars.de/faq> | SVN: <http://PointedEars.de/wsvn/>
Twitter: @PointedEars2 | ES Matrix: <http://PointedEars.de/es-matrix>
Please do not cc me. / Bitte keine Kopien per E-Mail.
Back to comp.lang.javascript | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Scope of "this" variable Teemu Likonen <tlikonen@iki.fi> - 2015-12-29 21:34 +0200
Re: Scope of "this" variable Ben Bacarisse <ben.usenet@bsb.me.uk> - 2015-12-29 20:47 +0000
Re: Scope of "this" variable Teemu Likonen <tlikonen@iki.fi> - 2015-12-30 10:57 +0200
Re: Scope of "this" variable Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2015-12-29 22:09 +0100
Re: Scope of "this" variable Joao Rodrigues <groups_jr-1@yahoo.com.br> - 2015-12-29 19:38 -0200
Re: Scope of "this" variable Joao Rodrigues <groups_jr-1@yahoo.com.br> - 2015-12-29 19:46 -0200
Re: Scope of "this" variable Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2015-12-30 00:42 +0100
Re: Scope of "this" variable Thomas 'PointedEars' Lahn <PointedEars@web.de> - 2015-12-30 00:35 +0100
Re: Scope of "this" variable Joao Rodrigues <groups_jr-1@yahoo.com.br> - 2015-12-30 02:18 -0200
csiph-web