比较版本

Defining Getters and Setters

更改版本

修订版 195254:

由 Chen zhiyuan 在 进行的修订 195254

修订版 195255:

由 Chen zhiyuan 在 进行的修订 195255

标题:
Defining Getters and Setters
Defining Getters and Setters
网址缩略名:
Core_JavaScript_1.5_Guide/Creating_New_Objects/Defining_Getters_and_Setters
Core_JavaScript_1.5_Guide/Creating_New_Objects/Defining_Getters_and_Setters
内容:

修订版 195254
修订版 195255
tt8      Getter是一种获取一个属性的值的方法,setter是一种设定一个属性的值的方法。可以为任何预定义的核心对象或用户自
 >定义对象定义getter和setter方法,从而为现有的对象添加新的属性。定义Getters和Setters 的语法使用的是对象[
 >文本化语法,http://http://www.cnblogs.com/birdshome/archive/2005/02/26/
 >105867.html]。
9    </p>
10    <p>
11      下面的这段JS代码介绍了如何在一个用户自定义的对象o上使用getter和setter。JS Shell是一个JS的调试
 >工具,开发人员可以在上面批量测试代码,或是进行交互测试。
12    </p>
13    <p>
14      The o object's properties are: 对象“o”的属性如下。
15    </p>
16    <ul>
17      <li>o.a - 一个数字
18      </li>
19      <li>o.b - 一个getter 返回比o.a大1的值
20      </li>
21      <li>o.c - 一个setter 设置o.a的值为原来的一半
22      </li>
23    </ul>
24    <p>
25      o = new Object; o = {a:7, get b() {return this.a+1; }, set 
 >c(x) {this.a = x/2}}; o.a o.b o.c = 50 o.a
26    </p>
27    <p>
28      下面的JS代码介绍了如何使用getter和setter来扩展Date原型,从而为预定义类型Date的所有实例都添加一个
 >年的属性。它使用了Date类中原有的getFullYear和setFullYear方法来实现年(year)属性的getter和se
 >tter.
29    </p>
30    <p>
31      下面的语句定义了属性“年”(year)的getter和setter: var d = Date.prototype; 
 >d.__defineGetter__("year", function() { return this.getFullYear()
 >; }); d.__defineSetter__("year", function(y) { this.setFullYear(y
 >); });
32    </p>
33    <p>
34      下面的语句使用了Date对象的getter和setter方法 var now = new Date; alert(no
 >w.year); now.year=2001; alert(now);
35    </p>
36    <p>
37      在Javascript 1.5的开发过程中,有过很小的一段时间,可以在表达式里用“getter=”或是“setter=
 >”这种方式来对已存在的对象定义新的getter和setter。这种语法现在已经废弃,将会在JS1.5的引擎中产生一个警告warin
 >g,将来会成为一个错误error。应该避免这样的写法。
38    </p>
39    <p>
40      摘要
41    </p>
42    <p>
43      原则上getters 和 setters 都可以
44    </p>
45    <ul>
46      <li>使用对象初始化过程来定义,或者
47      </li>
48      <li>在之后的任何时候,使用添加getter/setter的方法来追加定义。
49      </li>
50    </ul>
51    <p>
52      在使用对象初始化过程来定义getter和setter时,唯一要做的事就是在getter方法的前面加上 "get",在s
 >etter方法的前面加上"set"。当然了,getter方法是没有参数的,而setter方法明确的要求有一个参数(设置的新值)。例
 >如:
53    </p>
54    <p>
55      o = {
56    </p>
57    <pre class="eval">
58 a:7,
59 get b() { return this.a+1; },
60 set c(x) { this.a = x/2; }
61</pre>
62    <p>
63      };
64    </p>
65    <p>
66      在对象创建之后的任何时候,还可以通过两个特殊的方法来为它添加getter和setter,这两个方法是"__define
 >dGtter__"和"__definedSetter__"。这两个方法都要求它们的第一个参数是getter或setter的名字,以
 >string的形式给出;第二个参数是一个作为getter或是setter的函数function.例如(续上例)
67    </p>
68    <p>
69      o.__defineGetter__("b", function() { return this.a+1; }); o
 >.__defineSetter__("c", function(x) { this.a = x/2; });
70    </p>
71    <p>
72      使用哪种形式,取决个人的编程风格和当前的任务。如果在原型定义的时候已经考虑对象初始化过程,大多数情况下都选择第一种形式
 >,这种形式更紧凑,也更加自然。当然了,如果需要以后添加getter和setter--因为这个原型或是特定的对象并不是你写的--就只
 >能用后一种形式了。第二种形式可能更好的体现了JS的动态特征-这也使得代码难以阅读和理解。
73    </p>
74    <p>
75      <br>

返回历史