关于__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 相关文章推荐
js 创建书签小工具之理论
Feb 25 Javascript
{}与function(){}选用空对象{}来存放keyValue
May 23 Javascript
网页中返回顶部代码(多种方法)另附注释说明
Apr 24 Javascript
简介AngularJS中使用factory和service的方法
Jun 17 Javascript
高性能JavaScript DOM编程(1)
Aug 11 Javascript
jQuery添加删除DOM元素方法详解
Jan 18 Javascript
js提交form表单,并传递参数的实现方法
May 25 Javascript
node学习记录之搭建web服务器教程
Feb 16 Javascript
关于vue面试题汇总
Mar 20 Javascript
vue的toast弹窗组件实例详解
May 14 Javascript
Vue CL3 配置路径别名详解
May 30 Javascript
vue-quill-editor 自定义工具栏和自定义图片上传路径操作
Aug 03 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代码中使用换行及(\n或\r\n和br)的应用
2013/02/02 PHP
PHP抓屏函数实现屏幕快照代码分享
2014/01/02 PHP
php实现面包屑导航例子分享
2015/12/19 PHP
php四种定界符详解
2017/02/16 PHP
laravel + vue实现的数据统计绘图(今天、7天、30天数据)
2018/07/31 PHP
jquery中对表单的基本操作代码
2010/07/29 Javascript
基于JavaScript 类的使用详解
2013/05/07 Javascript
Egret引擎开发指南之编译项目
2014/09/03 Javascript
JavaScript中调用函数的4种方式代码实例
2015/07/08 Javascript
理解JavaScript表单的基础知识
2016/01/25 Javascript
使用OPENLAYERS3实现点选的方法
2020/09/24 Javascript
详解vue中使用express+fetch获取本地json文件
2017/10/10 Javascript
vue组件间通信子与父详解(二)
2017/11/07 Javascript
Vue微信项目按需授权登录策略实践思路详解
2018/05/07 Javascript
js如何找出字符串中的最长回文串
2018/06/04 Javascript
js仿淘宝放大镜效果
2020/12/28 Javascript
[54:28]EG vs OG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
Python字符转换
2008/09/06 Python
python数据库操作常用功能使用详解(创建表/插入数据/获取数据)
2013/12/06 Python
Python3爬虫之自动查询天气并实现语音播报
2019/02/21 Python
Python批量删除只保留最近几天table的代码实例
2019/04/01 Python
python实现对服务器脚本敏感信息的加密解密功能
2019/08/13 Python
django之自定义软删除Model的方法
2019/08/14 Python
Python 类,property属性(简化属性的操作),@property,property()用法示例
2019/10/12 Python
python使用正则来处理各种匹配问题
2019/12/22 Python
Python3.7 读取音频根据文件名生成脚本的代码
2020/04/07 Python
欧洲高端品牌直销店:Fashionesta
2016/08/31 全球购物
Herve Leger官网:标志性绷带连衣裙等
2018/12/26 全球购物
瑞典耳机品牌:URBANISTA
2019/12/03 全球购物
英国著名药妆店:Superdrug
2021/02/13 全球购物
计算s=f(f(-1.4))的值
2014/05/06 面试题
应届生自荐信
2014/06/30 职场文书
《植树问题》教学反思
2016/03/03 职场文书
Nginx优化服务之网页压缩的实现方法
2021/03/31 Servers
用Python简陋模拟n阶魔方
2021/04/17 Python
安装pytorch时报sslerror错误的解决方案
2021/05/17 Python