javascript中的__defineGetter__和__defineSetter__介绍


Posted in Javascript onAugust 15, 2014

Getter是一种获取一个属性的值的方法,Setter是一种设置一个属性的值的方法。可以为任何预定义的核心对象或用户自定义对象定义getter和setter方法,从而为现有的对象添加新的属性。

有两种方法来定义Getter或Setter方法:

1.在对象初始化时定义
2.在对象定义后通过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 相关文章推荐
再说AutoComplete自动补全之实现原理
Nov 05 Javascript
JavaScript高级程序设计(第3版)学习笔记7 js函数(上)
Oct 11 Javascript
JQuery each()函数如何优化循环DOM结构的性能
Dec 10 Javascript
jQuery实现鼠标经过事件的延时处理效果
Aug 20 Javascript
原生js实现百叶窗效果及原理介绍
Apr 12 Javascript
jquery-mobile基础属性与用法详解
Nov 23 Javascript
jq stop()和:is(:animated)的用法及区别(详解)
Feb 12 Javascript
jQuery树插件zTree使用方法详解
May 02 jQuery
详解用vue编写弹出框组件
Jul 04 Javascript
vue实现多条件和模糊搜索功能
May 28 Javascript
详解JSON.stringify()的5个秘密特性
May 26 Javascript
Vue中使用wangeditor富文本编辑的问题
Feb 07 Vue.js
js 判断图片是否加载完以及实现图片的预下载
Aug 14 #Javascript
js创建表单元素并使用submit进行提交
Aug 14 #Javascript
使用typeof判断function是否存在于上下文
Aug 14 #Javascript
java、javascript实现附件下载示例
Aug 14 #Javascript
js怎么判断flash swf文件是否加载完毕
Aug 14 #Javascript
Node.js入门教程:在windows和Linux上安装配置Node.js图文教程
Aug 14 #Javascript
JQuery Tips相关(1)----关于$.Ready()
Aug 14 #Javascript
You might like
Apache2 httpd.conf 中文版
2006/11/17 PHP
php数组函数序列之array_keys() - 获取数组键名
2011/10/30 PHP
解析mysql 表中的碎片产生原因以及清理
2013/06/22 PHP
深入浅析PHP7.0新特征(五大新特征)
2015/10/29 PHP
初识PHP中的Swoole
2016/04/05 PHP
javascript new fun的执行过程
2010/08/05 Javascript
JavaScript设置IFrame高度自适应(兼容各主流浏览器)
2013/06/05 Javascript
jQuery源码解读之hasClass()方法分析
2015/02/20 Javascript
基于JavaScript怎么实现让歌词滚动播放
2015/11/03 Javascript
详解Nodejs基于mongoose模块的增删改查的操作
2016/12/21 NodeJs
JS按条件 serialize() 对应标签的使用方法
2017/07/24 Javascript
JavaScript实现修改伪类样式
2017/11/27 Javascript
react router4+redux实现路由权限控制的方法
2018/05/03 Javascript
Nuxt升级2.0.0时出现的问题(小结)
2018/10/08 Javascript
async/await优雅的错误处理方法总结
2019/01/30 Javascript
bootstrap中的导航条实例代码详解
2019/05/20 Javascript
通过angular CDK实现页面元素拖放的步骤详解
2020/07/01 Javascript
python实现斐波那契递归函数的方法
2014/09/08 Python
Python实现TCP/IP协议下的端口转发及重定向示例
2016/06/14 Python
初学python的操作难点总结(新手必看篇)
2017/08/03 Python
python实现12306抢票及自动邮件发送提醒付款功能
2018/03/08 Python
查看django版本的方法分享
2018/05/14 Python
Python3 max()函数基础用法
2019/02/19 Python
python虚拟环境的安装和配置(virtualenv,virtualenvwrapper)
2019/08/09 Python
python使用requests.session模拟登录
2019/08/09 Python
Python Pandas 对列/行进行选择,增加,删除操作
2020/05/17 Python
Linux系统下升级pip的完整步骤
2021/01/31 Python
HTML5不支持frameset的两种解决方法
2016/11/14 HTML / CSS
adidas旗下高尔夫装备供应商:TaylorMade Golf(泰勒梅高尔夫)
2016/08/28 全球购物
音乐器材管理制度
2014/01/31 职场文书
企业文化演讲稿
2014/05/20 职场文书
电子专业求职信
2014/06/19 职场文书
三八活动策划方案
2014/08/17 职场文书
关于法制教育的宣传语
2015/07/13 职场文书
导游词之岳阳楼
2019/09/25 职场文书
python爬虫之爬取笔趣阁小说
2021/04/22 Python