关于__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 相关文章推荐
jquery 将disabled的元素置为enabled的三种方法
Jul 25 Javascript
javascript prototype原型操作笔记
Dec 07 Javascript
jquery checkbox 勾选的bug问题解决方案与分析
Nov 13 Javascript
JavaScript动态添加style节点的方法
Jun 09 Javascript
javascript页面倒计时实例
Jul 25 Javascript
JavaScript中Promise的使用详解
Feb 26 Javascript
详解vue 自定义marquee无缝滚动组件
Apr 09 Javascript
重学JS之显示强制类型转换详解
Jun 30 Javascript
vue中created和mounted的区别浅析
Aug 13 Javascript
vue中使用极验验证码的方法(附demo)
Dec 04 Javascript
JavaScript实现简单计算器功能
Dec 19 Javascript
vue动态合并单元格并添加小计合计功能示例
Nov 26 Vue.js
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的配置文件php.ini
2006/10/09 PHP
PHP 一个随机字符串生成代码
2010/05/26 PHP
PHP判断文件是否存在、是否可读、目录是否存在的代码
2012/10/03 PHP
php导出csv数据在浏览器中输出提供下载或保存到文件的示例
2014/04/24 PHP
PHP中auto_prepend_file与auto_append_file用法实例分析
2014/09/22 PHP
PHP的伪随机数与真随机数详解
2015/05/27 PHP
解决PHP程序运行时:Fatal error: Maximum execution time of 30 seconds exceeded in的错误提示
2016/11/25 PHP
PHP获取当前执行php文件名的代码
2017/03/02 PHP
Laravel validate error处理,ajax,json示例
2019/10/25 PHP
javascript两段代码,两个小技巧
2010/02/04 Javascript
JavaScript的漂亮的代码片段
2013/06/05 Javascript
jQuery判断当前点击的是第几个li的代码
2014/09/26 Javascript
常用的jQuery前端技巧收集
2014/12/24 Javascript
javascript批量修改文件编码格式的方法
2015/01/27 Javascript
javascript字符串与数组转换汇总
2015/05/26 Javascript
简单实现js鼠标跟随效果
2020/08/02 Javascript
ES6 javascript的异步操作实例详解
2017/10/30 Javascript
使用python装饰器验证配置文件示例
2014/02/24 Python
在Django的模型中添加自定义方法的示例
2015/07/21 Python
Python面向对象之Web静态服务器
2019/09/03 Python
利用Python绘制有趣的万圣节南瓜怪效果
2019/10/31 Python
使用wxpy实现自动发送微信消息功能
2020/02/28 Python
关于Python turtle库使用时坐标的确定方法
2020/03/19 Python
利用Python优雅的登录校园网
2020/10/21 Python
Fox Racing英国官网:越野摩托车和山地自行车服装
2020/02/26 全球购物
线程的基本概念、线程的基本状态以及状态之间的关系
2012/10/26 面试题
《赠汪伦》教学反思
2014/04/12 职场文书
十八大演讲稿
2014/05/22 职场文书
食品安全标语
2014/06/07 职场文书
道德模范事迹材料
2014/12/20 职场文书
困难补助申请报告
2015/05/19 职场文书
企业年会祝酒词
2015/08/11 职场文书
2015年度考核个人工作总结
2015/10/24 职场文书
详解盒子端CSS动画性能提升
2021/05/24 HTML / CSS
Python中递归以及递归遍历目录详解
2021/10/24 Python
win10电脑右下角输入法图标不见了?Win10右下角不显示输入法的解决方法
2022/07/23 数码科技