Compare Revisions

Defining Getters and Setters

Revision 169075:

Revision 169075 by Harald Albrecht on

Revision 169076:

Revision 169076 by Harald Albrecht on

Title:
Defining Getters and Setters
Defining Getters and Setters
Slug:
Talk:JavaScript/Guide/Obsolete_Pages/Creating_New_Objects/Defining_Getters_and_Setters
Talk:JavaScript/Guide/Obsolete_Pages/Creating_New_Objects/Defining_Getters_and_Setters
Content:

Revision 169075
Revision 169076
n11      I would like to suggest to clarify syntactic issues with den11      Since there were no objections even after a few months of w
>fining getters and setters. Like:>aiting, I've moved the clarifications to the article, under the h
 >eading "Summary".
t14      In principle, getters and setters can be eithert
15    </p>
16    <ul>
17      <li>defined using <a href="en/Core_JavaScript_1.5_Guide/Cre
>ating_New_Objects/Using_Object_Initializers">object initializers< 
>/a>, or 
18      </li>
19      <li>added later to any object at any time using a getter or
> setter adding method. 
20      </li>
21    </ul>
22    <p>
23      When defining getters and setters using <a href="en/Core_Ja
>vaScript_1.5_Guide/Creating_New_Objects/Using_Object_Initializers 
>">object initializers</a> all you need to do is to prefix a gette 
>r method with <code>get</code> and a setter method with <code>set 
></code>. Of course, the getter method must not expect a parameter 
>, while the setter method expects exactly one parameter (the new  
>value to set). For instance: 
24    </p>
25    <pre class="eval">
26o = {
27  a:7,
28  <b>get</b> b() { return this.a+1; },
29  <b>set</b> c(x) { this.a = x/2; }
30};
31</pre>
32    <p>
33      Getters and setters can also be added to an object at any t
>ime after creation using two special methods called <code>__defin 
>eGetter__</code> and <code>__defineSetter__</code>. Both methods  
>expect the name of the getter or setter as their first parameter, 
> in form of a string. The second parameter is the function to cal 
>l as the getter or setter. For instance (following the previous e 
>xample): 
34    </p>
35    <pre class="eval">
36o.__defineGetter__("b", function() { return this.a+1; });
37o.__defineSetter__("c", function(x) { this.a = x/2; });
38</pre>
39    <p>
40      Which of the two forms to choose depends on your programmin
>g style and task at hand. If you already go for the object initia 
>lizer when defining a prototype you will probably most of the tim 
>e choose the first form. This form is more compact and natural. H 
>owever, if you need to add getters and setters later – because yo 
>u did not wrote the prototype or particular object – then the sec 
>ond form is the only possible form. The second form probably best 
> represents the dynamic nature of JavaScript – but it can make th 
>e code hard to read and understand. 
41    </p>
42    <p>
43      <a href="User:Harald_Albrecht">Harald Albrecht</a> 08:28114      <a href="User:Harald_Albrecht">Harald Albrecht</a> 22:10, 0
>5 Jun 2005 (PDT)>6 Dec 2005 (MEZ)

Back to History