关于__defineGetter__ 和__defineSetter__的说明


Posted in Javascript onMay 12, 2007

作者:anbutu
来源:http://anbutu.javaeye.com/blog/post/194276
关键字: JavaScript   Mozilla __defineGetter__ __defineSetter__

Getter是一种获取一个属性的值的方法,Setter是一种设置一个属性的值的方法。可以为任何预定义的核心对象或用户自定义对象定义getter和setter方法,从而为现有的对象添加新的属性。
有两种方法来定义Getter或Setter方法:

在对象初始化时定义 
在对象定义后通过Object的__defineGetter__、__defineSetter__方法来追加定义 
在使用对象初始化过程来定义Getter和Setter方法时唯一要做的事情就是在getter方法前面加上“get”,在setter方法前面加上“set”。
还有一点要注意的就是getter方法没有参数,setter方法必须有一个参数,也就是要设置的属性的新值。
例如:

o = {     
    value:9,     
    get b() {return this.value;},     
    set setter(x) {this.value = x;}     
}    

在对象定义后给对象添加getter或setter方法要通过两个特殊的方法__defineGetter__和__defineSetter__。这两个函数要求第一个是getter或setter的名称,以string给出,第二个参数是作为getter或setter的函数。
例如我们给Date对象添加一个year属性:
Date.prototype.__defineGetter__('year', function() {return this.getFullYear();});     
Date.prototype.__defineSetter__('year', function(y) {this.setFullYear(y)});     var now = new Date;     
alert(now.year);     
now.year = 2006;     
alert(now);    

至于采用哪种形式主要取决于个人的编程风格,采用第一种形式结构紧凑,更容易理解。但是假如你想在对象定义以后再添加Getter或Setter,或者这个对象的原型不是你写的或是内置对象,那么只好采用第二种方式了。
下面是一个为Mozilla浏览器添加innerText属性的实现:
HTMLElement.prototype.__defineGetter__      
(     
   "innerText",function()     
   //define a getter method to get the value of innerText,      
   //so you can read it now!      
   {     
      var textRange = this.ownerDocument.createRange();     
      //Using range to retrieve the content of the object     
      textRange.selectNodeContents(this);     
      //only get the content of the object node     
      return textRange.toString();     
      // give innerText the value of the node content     
   }     
); 
Javascript 相关文章推荐
Javascript中string转date示例代码
Nov 01 Javascript
open 动态修改img的onclick事件示例代码
Nov 13 Javascript
Json和Jsonp理论实例代码详解
Nov 15 Javascript
Javascript实现简单的富文本编辑器附演示
Jun 16 Javascript
JQuery实现动态适时改变字体颜色的方法
Mar 10 Javascript
jquery单击事件和双击事件冲突解决方案
Mar 02 Javascript
jQuery 如何给Carousel插件添加新的功能
Apr 18 Javascript
js 动态添加元素(div、li、img等)及设置属性的方法
Jul 19 Javascript
vue2.0获取自定义属性的值
Mar 28 Javascript
深入理解vue $refs的基本用法
Jul 13 Javascript
详解js类型判断
May 22 Javascript
微信小程序swiper左右扩展各显示一半代码实例
Dec 05 Javascript
JavaScript Archive Network 集合
May 12 #Javascript
(仅IE下有效)关于checkbox 三态
May 12 #Javascript
弹出广告特效代码(一个IP只弹出一次)
May 11 #Javascript
模拟用户操作Input元素,不会触发相应事件
May 11 #Javascript
网上抓的一个特效
May 11 #Javascript
用javascript实现分割提取页面所需内容
May 09 #Javascript
javascript语句中的CDATA标签的意义
May 09 #Javascript
You might like
php中$this->含义分析
2009/11/29 PHP
在WAMP环境下搭建ZendDebugger php调试工具的方法
2011/07/18 PHP
php操作csv文件代码实例汇总
2014/09/22 PHP
php生成随机颜色的方法
2014/11/13 PHP
PHP+Mysql+jQuery查询和列表框选择操作实例讲解
2015/10/22 PHP
PHP实现文件上传和多文件上传
2015/12/24 PHP
js加密解密字符串可自定义密码因子
2014/05/13 Javascript
js立即执行函数: (function ( ){})( ) 与 (function ( ){}( )) 有什么区别?
2015/11/18 Javascript
jQuery对checkbox 复选框的全选全不选反选的操作
2016/08/09 Javascript
mvc 、bootstrap 结合分布式图简单实现分页
2016/10/10 Javascript
完美实现js焦点轮播效果(二)(图片可滚动)
2017/03/07 Javascript
tsconfig.json配置详解
2019/05/17 Javascript
Flutter实现仿微信底部菜单栏功能
2019/09/18 Javascript
JavaScript实现模态对话框实例
2020/01/13 Javascript
js实现登录时记住密码的方法分析
2020/04/05 Javascript
JavaScript cookie原理及使用实例
2020/05/08 Javascript
[01:04:14]OG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
Python 异常处理实例详解
2014/03/12 Python
python通过邮件服务器端口发送邮件的方法
2015/04/30 Python
Django返回json数据用法示例
2016/09/18 Python
让python 3支持mysqldb的解决方法
2017/02/14 Python
pandas中的DataFrame按指定顺序输出所有列的方法
2018/04/10 Python
Django密码系统实现过程详解
2019/07/19 Python
Django中提供的6种缓存方式详解
2019/08/05 Python
Pycharm连接远程服务器过程图解
2020/04/30 Python
python基于pexpect库自动获取日志信息
2021/02/01 Python
利用CSS3实现的文字定时向上滚动
2016/08/29 HTML / CSS
Melissa鞋英国官方网站:Nonnon
2019/05/01 全球购物
小学校本培训方案
2014/06/06 职场文书
业绩倒数第一的检讨书
2014/09/24 职场文书
公安机关党的群众路线教育实践活动剖析材料
2014/10/10 职场文书
2014年办公室主任工作总结
2014/11/12 职场文书
2014年医德医风工作总结
2014/11/13 职场文书
黄埔军校观后感
2015/06/10 职场文书
浅谈Python数学建模之固定费用问题
2021/06/23 Python
OpenCV实现反阈值二值化
2021/11/17 Java/Android