关于__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功能函数代码
Jun 23 Javascript
把jQuery的类、插件封装成seajs的模块的方法
Mar 12 Javascript
JavaScript不使用prototype和new实现继承机制
Dec 29 Javascript
jQuery中trigger()与bind()用法分析
Dec 18 Javascript
JavaScript动态创建div等元素实例讲解
Jan 06 Javascript
JavaScript事件详细讲解
Jun 27 Javascript
给Easyui-Datebox设置隐藏或者不可用的解决方法
May 26 Javascript
JS+canvas实现的五子棋游戏【人机大战版】
Jul 19 Javascript
微信小程序定位当前城市的方法
Jul 19 Javascript
基于JavaScript canvas绘制贝塞尔曲线
Dec 25 Javascript
JavaScript:ES2019 的新特性(译)
Aug 08 Javascript
JavaScript常用工具函数库汇总
Sep 17 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
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
2010/05/10 PHP
php内嵌函数用法实例
2015/03/20 PHP
php获取Google机器人访问足迹的方法
2015/04/15 PHP
CodeIgniter配置之autoload.php自动加载用法分析
2016/01/20 PHP
Prototype使用指南之base.js
2007/01/10 Javascript
Jquery 最近浏览过的商品的功能实现代码
2010/05/14 Javascript
js验证模型自我实现的具体方法
2013/06/21 Javascript
js正文内容高亮效果的实现方法
2013/06/30 Javascript
js 弹出框只弹一次(二次修改之后的)
2013/11/26 Javascript
js判断变量初始化的三种形式及推荐用的形式
2014/07/22 Javascript
原生js和jQuery随意改变div属性style的名称和值
2014/10/22 Javascript
jquery移动端TAB触屏切换实现效果
2020/12/22 Javascript
jQuery密码强度检测插件passwordStrength用法实例分析
2015/10/30 Javascript
BootStrap表单验证实例代码
2017/01/13 Javascript
JS实现图片放大镜插件详解
2017/11/06 Javascript
webpack构建的详细流程探底
2018/01/08 Javascript
React Native悬浮按钮组件的示例代码
2018/04/05 Javascript
详解微信小程序实现WebSocket心跳重连
2018/07/31 Javascript
nodejs图片处理工具gm用法小结
2018/12/12 NodeJs
vue 实现滚动到底部翻页效果(pc端)
2019/07/31 Javascript
用Golang运行JavaScript的实现示例
2019/11/25 Javascript
vuex中store存储store.commit和store.dispatch的用法
2020/07/24 Javascript
给Python的Django框架下搭建的BLOG添加RSS功能的教程
2015/04/08 Python
小议Python中自定义函数的可变参数的使用及注意点
2016/06/21 Python
梯度下降法介绍及利用Python实现的方法示例
2017/07/12 Python
Python中分支语句与循环语句实例详解
2018/09/13 Python
python 在指定范围内随机生成不重复的n个数实例
2019/01/28 Python
浅谈Django中view对数据库的调用方法
2019/07/18 Python
python学习笔记之多进程
2020/08/06 Python
MoviePy常用剪辑类及Python视频剪辑自动化
2020/12/18 Python
2014年师德师风自我剖析材料
2014/09/27 职场文书
办公室务虚会发言材料
2014/10/20 职场文书
2015年英语教研组工作总结
2015/05/23 职场文书
工作简报怎么写
2015/07/21 职场文书
numpy数据类型dtype转换实现
2021/04/24 Python
Go 自定义package包设置与导入操作
2021/05/06 Golang