关于__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 相关文章推荐
Struts2的s:radio标签使用及用jquery添加change事件
Apr 08 Javascript
javascript之typeof、instanceof操作符使用探讨
May 19 Javascript
jquery 实现窗口的最大化不论什么情况
Sep 03 Javascript
JavaScript程序开发之JS代码放置的位置
Jan 15 Javascript
简单讲解AngularJS的Routing路由的定义与使用
Mar 05 Javascript
解决vue props 拿不到值的问题
Sep 11 Javascript
使用vue-router切换页面时,获取上一页url以及当前页面url的方法
May 06 Javascript
JS块级作用域和私有变量实例分析
May 11 Javascript
微信小程序中如何使用flyio封装网络请求
Jul 03 Javascript
Layui 数据表格批量删除和多条件搜索的实例
Sep 04 Javascript
解决vue 使用setTimeout,离开当前路由setTimeout未销毁的问题
Jul 21 Javascript
vue递归实现树形组件
Jul 15 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下对数组进行排序的函数
2010/08/08 PHP
php多文件上传实现代码
2014/02/20 PHP
php中判断数组相等的方法以及数组运算符介绍
2015/03/30 PHP
作为程序员必知的16个最佳PHP库
2015/12/09 PHP
基于php(Thinkphp)+jquery 实现ajax多选反选不选删除数据功能
2017/02/24 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
2020/02/27 PHP
用document.documentElement取代document.body的原因分析
2009/11/12 Javascript
Struts2的s:radio标签使用及用jquery添加change事件
2013/04/08 Javascript
BootStrapValidator校验方式
2016/12/19 Javascript
详解JS中定时器setInterval和setTImeout的this指向问题
2017/01/06 Javascript
JS实现旋转木马式图片轮播效果
2017/01/18 Javascript
如何在 Vue.js 中使用第三方js库
2017/04/25 Javascript
vue插件实现v-model功能
2018/09/10 Javascript
微信小程序局部刷新触发整页刷新效果的实现代码
2018/11/21 Javascript
vue前端框架—Mint UI详解(更适用于移动端)
2019/04/30 Javascript
如何实现小程序tab栏下划线动画效果
2019/05/18 Javascript
微信小程序如何获取群聊的openGid以及名称详解
2019/07/17 Javascript
layuiAdmin循环遍历展示商品图片列表的方法
2019/09/16 Javascript
微信小程序swiper组件实现抖音翻页切换视频功能的实例代码
2020/06/24 Javascript
JS禁用右键、禁用Ctrl+u、禁用Ctrl+s、禁用F12的实现代码
2020/12/01 Javascript
[37:45]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS Orenda
2014/05/22 DOTA
Python读写Json涉及到中文的处理方法
2016/09/12 Python
浅谈django model的get和filter方法的区别(必看篇)
2017/05/23 Python
Django代码性能优化与Pycharm Profile使用详解
2018/08/26 Python
使用 Python 玩转 GitHub 的贡献板(推荐)
2019/04/04 Python
Python3使用Matplotlib 绘制精美的数学函数图形
2019/04/11 Python
Tensorflow 定义变量,函数,数值计算等名字的更新方式
2020/02/10 Python
Python函数递归调用实现原理实例解析
2020/08/11 Python
Python Web项目Cherrypy使用方法镜像
2020/11/05 Python
canvas学习笔记之2d画布基础的实现
2019/02/21 HTML / CSS
建筑安全标语
2014/06/07 职场文书
考生诚信考试承诺书(2016版)
2016/03/25 职场文书
jQuery实现影院选座订座效果
2021/04/13 jQuery
pandas中DataFrame检测重复值的实现
2021/05/26 Python
一小时迅速入门Mybatis之bind与多数据源支持 Java API
2021/09/15 Javascript
CSS 实现磨砂玻璃(毛玻璃)效果样式
2023/05/21 HTML / CSS