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 相关文章推荐
JSON 和 JavaScript eval使用说明
Jun 13 Javascript
解析瀑布流布局:JS+绝对定位的实现
May 08 Javascript
JS实现QQ图片一闪一闪的效果小例子
Jul 31 Javascript
jQuery实现感应鼠标动画效果自动伸长的输入框实例
Feb 24 Javascript
Bootstrap组件(一)之菜单
May 11 Javascript
jQuery中的AjaxSubmit使用讲解
Sep 25 Javascript
简单理解vue中Props属性
Oct 27 Javascript
js文件中直接alert()中文出来的是乱码的解决方法
Nov 01 Javascript
微信小程序(三):网络请求
Jan 13 Javascript
Vue波纹按钮组件制作
Apr 30 Javascript
原生js实现抽奖小游戏
Jun 27 Javascript
JS将时间秒转换成天小时分钟秒的字符串
Jul 10 Javascript
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
PHP判断表单复选框选中状态完整例子
2014/06/24 PHP
PHP实现通过strace定位故障原因的方法
2018/04/29 PHP
利用JavaScript检测CPU使用率自己写的
2014/03/22 Javascript
jQuery+ajax实现鼠标单击修改内容的方法
2014/06/27 Javascript
关于编写性能高效的javascript事件的技术
2014/11/28 Javascript
jQuery多个input求和的实现方法
2015/02/12 Javascript
JavaScript实现网站访问次数统计代码
2015/08/12 Javascript
原生Javascript和jQuery做轮播图简单例子
2016/10/11 Javascript
使用jQuery的load方法设计动态加载及解决被加载页面js失效问题
2017/03/01 Javascript
SpringMVC+bootstrap table实例详解
2017/06/02 Javascript
vue路由跳转时判断用户是否登录功能的实现
2017/10/26 Javascript
微信小程序有旋转动画效果的音乐组件实例代码
2018/08/22 Javascript
解决iview多表头动态更改列元素发生的错误的方法
2018/11/02 Javascript
Angular Excel 导入与导出的实现代码
2019/04/17 Javascript
详解vue 在移动端体验上的优化解决方案
2019/05/20 Javascript
适合前端Vue开发童鞋的跨平台Weex的使用详解
2019/10/16 Javascript
[10:21]2018DOTA2国际邀请赛寻真——Winstrike
2018/08/11 DOTA
TensorFlow实现Softmax回归模型
2018/03/09 Python
Python实现的从右到左字符串替换方法示例
2018/07/06 Python
python如何实现视频转代码视频
2019/06/17 Python
Python 3.6 -win64环境安装PIL模块的教程
2019/06/20 Python
nginx+uwsgi+django环境搭建的方法步骤
2019/11/25 Python
Pytorch 计算误判率,计算准确率,计算召回率的例子
2020/01/18 Python
使用HTML和CSS3绘制基本卡通图案的示例分享
2015/11/06 HTML / CSS
html5使用html2canvas实现浏览器截图的示例
2017/08/31 HTML / CSS
Kneipp克奈圃美国官网:德国百年精油配方的传承
2018/02/07 全球购物
印尼最大的网上书店:Gramedia.com
2018/09/13 全球购物
Hush Puppies澳大利亚官网:舒适的男女休闲和正装鞋
2019/08/24 全球购物
全球采购的街头服饰和帽子:Urban Excess
2020/10/28 全球购物
个人收入证明范本
2014/01/12 职场文书
物流管理专业毕业生自荐信
2014/03/04 职场文书
《白鹅》教学反思
2014/04/13 职场文书
乡镇领导班子批评与自我批评材料
2014/09/23 职场文书
2015年办公室主任工作总结
2015/04/09 职场文书
律师函格式范本
2015/05/27 职场文书
学生退学证明
2015/06/23 职场文书