关于__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 监听textarea中按键事件
Oct 08 Javascript
js简单实现根据身份证号码识别性别年龄生日
Nov 29 Javascript
jQuery中的ajax async同步和异步详解
Sep 29 Javascript
jQuery form 表单验证插件(fieldValue)校验表单
Jan 24 Javascript
JQuery用户名校验的具体实现
Mar 18 Javascript
JavaScript中setter和getter方法介绍
Jul 11 Javascript
JSON 必知必会 观后记
Oct 27 Javascript
JavaScript比较两个数组的内容是否相同(推荐)
May 02 Javascript
angularjs定时任务的设置与清除示例
Jun 02 Javascript
JS模拟实现哈希表及应用详解
May 04 Javascript
bootstrap table实现横向合并与纵向合并
Jul 18 Javascript
vue点击当前路由高亮小案例
Sep 26 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脚本数据库功能详解(上)
2006/10/09 PHP
PHP HTML代码串截取代码
2008/12/29 PHP
利用php获取服务器时间的实现代码
2013/06/07 PHP
php实现点击可刷新验证码
2015/11/07 PHP
PDO::rollBack讲解
2019/01/29 PHP
单击按钮显示隐藏子菜单经典案例
2013/01/04 Javascript
使用JavaScript构建JSON格式字符串实现步骤
2013/03/22 Javascript
js简易namespace管理器 实例代码
2013/06/21 Javascript
jquery实现隐藏与显示动画效果/输入框字符动态递减/导航按钮切换
2013/07/01 Javascript
自动设置iframe大小的jQuery代码
2013/09/11 Javascript
动态的绑定事件addEventListener方法的使用
2014/01/24 Javascript
jquery获取tagName再进行判断
2014/05/29 Javascript
根据当前时间在jsp页面上显示上午或下午
2014/08/18 Javascript
使用jquery操作session方法分享
2015/01/22 Javascript
向JavaScript的数组中添加元素的方法小结
2015/10/24 Javascript
jQuery模仿阿里云购买服务器选择购买时间长度的代码
2016/04/29 Javascript
实例解析jQuery中proxy()函数的用法
2016/05/24 Javascript
浅谈Javascript中的Label语句
2016/12/14 Javascript
Avalonjs双向数据绑定与监听的实例代码
2017/06/23 Javascript
JavaScript设计模式之构造器模式(生成器模式)定义与用法实例分析
2018/07/26 Javascript
Angular6 正则表达式允许输入部分中文字符
2018/09/10 Javascript
js核心基础之闭包的应用实例分析
2019/05/11 Javascript
解决python2.7用pip安装包时出现错误的问题
2017/01/23 Python
Python爬虫使用Selenium+PhantomJS抓取Ajax和动态HTML内容
2018/02/23 Python
pyinstaller还原python代码过程图解
2020/01/08 Python
pycharm 中mark directory as exclude的用法详解
2020/02/14 Python
Python 实现日志同时输出到屏幕和文件
2020/02/19 Python
tensorflow之读取jpg图像长和宽实例
2020/06/18 Python
python 读txt文件,按‘,’分割每行数据操作
2020/07/05 Python
英国时尚服饰电商:Boohoo
2017/10/12 全球购物
英国花园药房: The Garden Pharmacy
2017/12/28 全球购物
Carter’s官方旗舰店:美国受欢迎的婴童服装品牌
2018/01/21 全球购物
一套英文Java笔试题面试题
2016/04/21 面试题
学生保证书
2015/01/16 职场文书
python爬取豆瓣电影TOP250数据
2021/05/23 Python
使用opencv-python如何打开USB或者笔记本前置摄像头
2022/06/21 Python