关于__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获得选中文本内容的方法
Dec 02 Javascript
Javascript学习笔记7 原型链的原理
Jan 11 Javascript
jQuery遍历DOM节点操作之filter()方法详解
Apr 14 Javascript
jQuery实现鼠标跟随提示层效果代码(可显示文本,Div,Table,Html等)
Apr 18 Javascript
微信小程序 Toast自定义实例详解
Jan 20 Javascript
ES6学习之变量的解构赋值
Feb 12 Javascript
JavaScript实现带有子菜单和控件的slider轮播图效果
Nov 01 Javascript
JS从非数组对象转数组的方法小结
Mar 26 Javascript
微信小程序实现slideUp、slideDown滑动效果及点击空白隐藏功能示例
Dec 11 Javascript
前端天气插件tpwidget使用方法详解
Jun 24 Javascript
Vue+Java+Base64实现条码解析的示例
Sep 23 Javascript
Vue过滤器,生命周期函数和vue-resource简单介绍
Jan 12 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
珊瑚虫IP库浅析
2007/02/15 PHP
探讨PHP删除文件夹的三种方法
2013/06/09 PHP
php通过array_merge()函数合并两个数组的方法
2015/03/18 PHP
php生成curl命令行的方法
2015/12/14 PHP
php+MySql实现登录系统与输出浏览者信息功能
2016/07/01 PHP
php 生成Tab键或逗号分隔的CSV
2016/09/24 PHP
PHP基于正则批量替换Img中src内容实现获取缩略图的功能示例
2017/06/07 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
2020/02/27 PHP
JQuery里选择超链接的实现代码
2011/05/22 Javascript
Knockoutjs的环境搭建教程
2012/11/26 Javascript
JavaScript 在网页上单击鼠标的地方显示层及关闭层
2012/12/30 Javascript
基于jquery中children()与find()的区别介绍
2013/04/26 Javascript
jquery提取元素里的纯文本不包含span等里的内容
2013/09/30 Javascript
node.js使用npm 安装插件时提示install Error: ENOENT报错的解决方法
2014/11/20 Javascript
Node.js返回JSONP详解
2016/05/18 Javascript
基于JS实现的随机数字抽签实例
2016/12/08 Javascript
Bootstrap表单使用方法详解
2017/02/17 Javascript
Js自动截取字符串长度,添加省略号(……)的实现方法
2017/03/06 Javascript
VsCode插件整理(小结)
2017/09/14 Javascript
详解node child_process模块学习笔记
2018/01/24 Javascript
vue.js自定义组件directives的实例代码
2018/11/09 Javascript
vue日历/日程提醒/html5本地缓存功能
2019/09/02 Javascript
解决layui的form里的元素进行动态生成,验证失效的问题
2019/09/14 Javascript
JS hasOwnProperty()方法检测一个属性是否是对象的自有属性的方法
2021/01/29 Javascript
[00:35]DOTA2上海特级锦标赛 MVP.Phx战队宣传片
2016/03/04 DOTA
Python数据操作方法封装类实例
2017/06/23 Python
python爬虫之爬取百度音乐的实现方法
2019/08/24 Python
python 利用turtle模块画出没有角的方格
2019/11/23 Python
python在linux环境下安装skimage的示例代码
2020/10/14 Python
将"引用"作为函数返回值类型的格式、好处和需要遵守的规则
2016/02/09 面试题
银行毕业实习自我鉴定
2013/09/19 职场文书
电子商务个人自荐信
2013/12/12 职场文书
业务部门经理岗位职责
2014/02/23 职场文书
家长对老师的评语
2014/04/18 职场文书
村委会贫困证明范本
2014/09/17 职场文书
ECharts transform数据转换和dataZoom在项目中使用
2022/12/24 Javascript