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 相关文章推荐
CSS+Jquery实现页面圆角框方法大全
Dec 24 Javascript
js实现网页自动刷新可制作节日倒计时效果
May 27 Javascript
实例讲解Jquery中隐藏hide、显示show、切换toggle的用法
May 13 Javascript
jQuery select自动选中功能实现方法分析
Nov 28 Javascript
Node.js Mongodb 密码特殊字符 @的解决方法
Apr 11 Javascript
微信小程序动态添加分享数据
Jun 14 Javascript
Vue+Mock.js模拟登录和表格的增删改查功能
Jul 26 Javascript
Vue2.0学习系列之项目上线的方法步骤(图文)
Sep 25 Javascript
angular将html代码输出为内容的实例
Sep 30 Javascript
Javascript中parseInt的正确使用方式
Oct 17 Javascript
vue源码nextTick使用及原理解析
Aug 13 Javascript
JS 创建对象的模式实例小结
Apr 28 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设计模式 Visitor 访问者模式
2011/06/28 PHP
无法载入 mcrypt 扩展,请检查 PHP 配置终极解决方案
2011/07/18 PHP
thinkphp四种url访问方式详解
2014/11/28 PHP
为何说PHP引用是个坑,要慎用
2018/04/02 PHP
ThinkPHP3.2.3框架Memcache缓存使用方法实例总结
2019/04/15 PHP
jquery实现简单的拖拽效果实例兼容所有主流浏览器(优化篇)
2013/06/28 Javascript
jquery获取对象的方法足以应付常见的各种类型的对象
2014/05/14 Javascript
jquery中post方法用法实例
2014/10/21 Javascript
js实现模拟计算器退格键删除文字效果的方法
2015/05/07 Javascript
浅谈jquery之on()绑定事件和off()解除绑定事件
2016/10/26 Javascript
JS简单获取当前年月日星期的方法示例
2017/02/07 Javascript
JS中解决谷歌浏览器记住密码输入框颜色改变功能
2017/02/13 Javascript
JavaScript实现审核流程状态的动态显示进度条
2017/03/15 Javascript
AngularJS实现select的ng-options功能示例
2017/07/12 Javascript
jQuery+Ajax请求本地数据加载商品列表页并跳转详情页的实现方法
2017/07/12 jQuery
jQuery实现可兼容IE6的遮罩功能详解
2017/09/19 jQuery
layui表格checkbox选择全选样式及功能的实例
2018/03/07 Javascript
微信小程序实现留言功能
2018/10/31 Javascript
vue强制刷新组件的方法示例
2019/02/28 Javascript
vue封装swiper代码实例解析
2019/10/08 Javascript
js实现简易计算器功能
2019/10/18 Javascript
vue 实现基础组件的自动化全局注册
2020/12/25 Vue.js
零基础写python爬虫之爬虫框架Scrapy安装配置
2014/11/06 Python
python实现批量改文件名称的方法
2015/05/25 Python
PyCharm使用教程之搭建Python开发环境
2016/06/07 Python
Python数据操作方法封装类实例
2017/06/23 Python
python自动截取需要区域,进行图像识别的方法
2018/05/17 Python
python如何写出表白程序
2020/06/01 Python
python中yield的用法详解
2021/01/13 Python
Laravel的加密解密与哈希实例讲解
2021/03/24 PHP
工商企业管理应届生求职信
2013/11/03 职场文书
人事任命书怎么写
2014/06/05 职场文书
教学反思怎么写
2016/02/24 职场文书
入党心得体会
2019/06/20 职场文书
python用字节处理文件实例讲解
2021/04/13 Python
Redis做数据持久化的解决方案及底层原理
2021/07/15 Redis