转自:http://www.blackglory.me/javascript-magic-method-definegetter-definesetter/
在javascript的类中,可以用__defineGetter__和__defineSetter___控制成员变量的Get和Set行为
例如,在一个图书类中,我们自动为Book加上书名符号:
1
2
3
4
5
6
7
8
9
|
function Book(name){ this .bookName=name; this .getName= function (){ return "《" + this .bookName+ " 》 " ; } this .setName= function (name){ this .bookName=name; } } |
接下来我们只要规定使用者通过setName和getName方法对成员变量bookName操作就可以了.
但实际上还可以更方便:
1
2
3
4
5
6
7
8
9
10
11
|
function Book(name){ this .bookName=name; this .getName= function (){ return "《" + this .bookName+ "》" ; } this .setName= function (name){ this .bookName=name; } } Book.prototype.__defineGetter__( "name" , function (){ return "《" + this .bookName+ "》" ;}); Book.prototype.__defineSetter__( "name" , function (name){ this .bookName=name;}); |
这样,就可以直接通过Book对象的name属性来返回带有书名符号的字符串而又不影响成员变量本身了.