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 相关文章推荐
Javascript & DHTML 实例编程(教程)(三)初级实例篇1—上传文件控件实例
Jun 02 Javascript
javascript 装载iframe子页面,自适应高度
Mar 20 Javascript
JavaScript改变CSS样式的方法汇总
May 07 Javascript
详解JavaScript的流程控制语句
Nov 30 Javascript
JavaScript生成二维码图片小结
Dec 27 Javascript
JS实现登录页面记住密码和enter键登录方法推荐
May 10 Javascript
基于AngularJS实现表单验证功能
Jul 28 Javascript
SelectPage v2.4 发布新增纯下拉列表和关闭分页功能
Sep 07 Javascript
详解Node全局变量global模块
Sep 28 Javascript
JavaScript中创建原子的方法总结
Aug 26 Javascript
vue下使用nginx刷新页面404的问题解决
Aug 02 Javascript
Javascript Worker子线程代码实例
Feb 20 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
PHP4实际应用经验篇(3)
2006/10/09 PHP
php设计模式 Builder(建造者模式)
2011/06/26 PHP
通过PHP的内置函数,通过DES算法对数据加密和解密
2012/06/21 PHP
PHP中模糊查询并关联三个select框
2017/06/19 PHP
关于laravel 日志写入失败问题汇总
2019/10/17 PHP
PHP实现简单日历类编写
2020/08/28 PHP
修改jquery里的dialog对话框插件为框架页(iframe) 的方法
2010/09/14 Javascript
JS获取浏览器版本及名称实现函数
2013/04/02 Javascript
利用jQuery实现漂亮的圆形进度条倒计时插件
2015/09/30 Javascript
JS实现选项卡实例详解
2015/11/17 Javascript
js性能优化技巧
2015/11/29 Javascript
js采用concat和sort将N个数组拼接起来的方法
2016/01/21 Javascript
解决js函数闭包内存泄露问题的办法
2016/01/25 Javascript
基于JS实现textarea中获取动态剩余字数的方法
2016/05/25 Javascript
微信小程序 引用其他js文件实现代码
2017/02/22 Javascript
vue2.0多条件搜索组件使用详解
2020/03/26 Javascript
用JS实现简单的登录验证功能
2017/07/28 Javascript
angularjs中$http异步上传Excel文件方法
2018/02/23 Javascript
vue 解决addRoutes动态添加路由后刷新失效问题
2018/07/02 Javascript
Node.js如何优雅的封装一个实用函数的npm包的方法
2019/04/29 Javascript
[04:52]第二届DOTA2亚洲邀请赛主赛事第一天比赛集锦:OG娜迦海妖放大配合谜团大中3人
2017/04/02 DOTA
python生成指定尺寸缩略图的示例
2014/05/07 Python
Python中的异常处理相关语句基础学习笔记
2016/07/11 Python
基于Django contrib Comments 评论模块(详解)
2017/12/08 Python
Python简单爬虫导出CSV文件的实例讲解
2018/07/06 Python
详解opencv Python特征检测及K-最近邻匹配
2019/01/21 Python
澳大利亚运动鞋零售商:The Athlete’s Foot
2018/11/04 全球购物
高三地理教学反思
2014/01/11 职场文书
大学生优秀团员事迹材料
2014/01/30 职场文书
锦旗标语大全
2014/06/23 职场文书
初中成绩单评语
2014/12/29 职场文书
2015年学生资助工作总结
2015/05/25 职场文书
五星红旗迎风飘扬观后感
2015/06/17 职场文书
小学语文课《掌声》教学反思
2016/03/03 职场文书
Windows下载并安装MySQL8.0.x 版本的完整教程
2022/04/10 MySQL
JavaScript声明变量和数据类型的转换
2022/04/12 Javascript