关于__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 相关文章推荐
来自chinaz的ajax获取评论代码
May 03 Javascript
JavaScript入门教程(2) JS基础知识
Jan 31 Javascript
浅谈JavaScript函数参数的可修改性问题
Dec 05 Javascript
jQuery实现的数值范围range2dslider选取插件特效多款代码分享
Aug 27 Javascript
JQuery之proxy实现绑定代理方法
Aug 01 Javascript
IE8利用自带的setCapture和releaseCapture解决iframe的拖拽事件方法
Oct 25 Javascript
JavaScript中创建对象的7种模式详解
Feb 21 Javascript
详解ECMAScript6入门--Class对象
Apr 27 Javascript
jQuery选择器之子元素选择器详解
Sep 18 jQuery
30分钟快速实现小程序语音识别功能
Nov 27 Javascript
vue使用高德地图根据坐标定位点的实现代码
Aug 22 Javascript
vue动态设置路由权限的主要思路
Jan 13 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将会员数据导入到ucenter的代码
2010/07/18 PHP
php导入模块文件分享
2015/03/17 PHP
PHP实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
PHP对象的浅复制与深复制的实例详解
2017/10/26 PHP
PHP删除数组中指定值的元素常用方法实例分析【4种方法】
2018/08/21 PHP
总结AJAX相关JS代码片段和浏览器模型
2007/08/15 Javascript
javascript Discuz代码中的msn聊天小功能
2008/05/25 Javascript
jQuery技巧大放送 学习jquery的朋友可以看下
2009/10/14 Javascript
密码框显示提示文字jquery示例
2013/08/29 Javascript
代码获取历史上的今天发生的事
2014/04/11 Javascript
js子页面获取父页面数据示例
2014/05/15 Javascript
jquery validate表单验证的基本用法入门
2016/01/18 Javascript
javascript数组去重小结
2016/03/07 Javascript
探寻JavaScript中this指针指向
2016/04/23 Javascript
javascript用正则表达式过滤空格的实现代码
2016/06/14 Javascript
微信小程序中使用Promise进行异步流程处理的实例详解
2017/08/17 Javascript
初探JavaScript 面向对象(推荐)
2017/09/03 Javascript
解决vue-router中的query动态传参问题
2018/03/20 Javascript
vue 实现在函数中触发路由跳转的示例
2018/09/01 Javascript
[46:32]Fnatic vs OG 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python 深入理解yield
2008/09/06 Python
zookeeper python接口实例详解
2018/01/18 Python
Flask框架Flask-Login用法分析
2018/07/23 Python
Python装饰器语法糖
2019/01/02 Python
opencv python统计及绘制直方图的方法
2019/01/21 Python
Python函数返回不定数量的值方法
2019/01/22 Python
python 正则表达式贪婪模式与非贪婪模式原理、用法实例分析
2019/10/14 Python
Python学习之os模块及用法
2020/06/03 Python
Django vue前后端分离整合过程解析
2020/11/20 Python
优秀应届毕业生自荐信
2013/11/16 职场文书
《宿建德江》教学反思
2014/04/23 职场文书
办公室文员工作自我鉴定
2014/09/19 职场文书
2014年初中班主任工作总结
2014/11/08 职场文书
前台接待岗位职责范本
2015/04/03 职场文书
go goroutine 怎样进行错误处理
2021/07/16 Golang
Python中Schedule模块使用详解 周期任务神器
2022/04/19 Python