Path: csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!feeder.erje.net!us.feeder.erje.net!news2.arglkargh.de!news.mixmin.net!weretis.net!feeder1.news.weretis.net!news.solani.org!.POSTED!not-for-mail From: Thomas 'PointedEars' Lahn Newsgroups: comp.lang.javascript Subject: Re: Can somebody explain this to me Date: Tue, 06 Jan 2015 01:40:16 +0100 Organization: PointedEars Software (PES) Lines: 60 Message-ID: <1590597.KOVAYohEvS@PointedEars.de> References: Reply-To: Thomas 'PointedEars' Lahn Mime-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8Bit X-Trace: solani.org 1420504839 24084 eJwNykkBwDAIBEBL0IYlyOH0LyG8Z+QHI/VAcGRksrXhMRTEtmBZDP3c6xYIWNVrEuTem+sBLq0R/A== (6 Jan 2015 00:40:39 GMT) X-Complaints-To: abuse@news.solani.org NNTP-Posting-Date: Tue, 6 Jan 2015 00:40:39 +0000 (UTC) User-Agent: KNode/4.14.2 X-User-ID: eJwNyskBwDAIA7CVSLEhjEM59h+h1VtUO1YOo4HLrVCL3JE6d+YKyluYe+a5yYn8U3sjCEEmdUP8jr0w9Gh9Y/EV1Q== Cancel-Lock: sha1:/zKpGo1BqutLjz4OB3IoiTcjGgM= X-NNTP-Posting-Host: eJwNycEBgEAIA7CV0GtBxikI+4+g+YbHL++A08HlppQodHIkhZlgpMyGjdl6lVNRd555/vcPLjYR4w== Xref: csiph.com comp.lang.javascript:26466 Tony Johansson wrote: > The code at the end works but I have a question. > When I have this code construction with prototype I can call the getFoo in > this way var poo = f.getFoo(); // "bar" > P.prototype.getFoo = function () > { I recommend to put the opening brace of a function expression on the same line as the “function” keyword in order to tell function declarations and function expressions apart more easily. > return this.foo; > }; > > > I mean if I add this piece of code into the class definition There are no classes in this case; prototype-based inheritance is used. > I can call the getFoo in this way var poo = f.getFoo(); // "bar" ^ method > this.getFoo = function () > { > return this.foo; > }; > > So as a summary can somebody explain what is the advantage to use a > prototype in this exemple? Inherited methods can be reused. In this example, one advantage is that only one Function instance is created, which saves memory as compared to the instance method approach. It also saves runtime because the creation of that object only happens once. (There are also disadvantages.) > function P(foo) //Here is the class definition No, there is the declaration of a function named “P” that can be called as a constructor. This also means that a Function instance (an object) is being created that can be referred to by “P”. > { > this.foo = foo; > // implicit return av "this" i den fall då P anropas som > konstruktor Correct. > var f = new P("bar"); Using the “new” keyword on a reference to an object that implements the internal [[Construct]] method (which applies to Function instances) calls that object as a constructor. -- PointedEars FAQ: | SVN: Twitter: @PointedEars2 | ES Matrix: Please do not cc me. / Bitte keine Kopien per E-Mail.