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实现页面重定向功能的教程
Jun 04 Javascript
JavaScript基础知识及常用方法总结
Jan 10 Javascript
修改jquery中dialog的title属性方法(推荐)
Aug 26 Javascript
jQuery 特性操作详解及实例代码
Sep 29 Javascript
jQuery使用ajax方法解析返回的json数据功能示例
Jan 10 Javascript
JavaScript运动框架 多值运动(四)
May 18 Javascript
vue2.0 中#$emit,$on的使用详解
Jun 07 Javascript
jQuery实现注册会员时密码强度提示信息功能示例
Sep 05 jQuery
javaScript字符串工具类StringUtils详解
Dec 08 Javascript
基于Angularjs-router动态改变Title值的问题
Aug 30 Javascript
微信小程序图片左右摆动效果详解
Jul 13 Javascript
js实现点击上传图片并设为模糊背景
Aug 02 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 session应用实例 登录验证
2009/03/16 PHP
php设计模式之委托模式
2016/02/13 PHP
PDO::errorInfo讲解
2019/01/28 PHP
thinkphp整合系列之极验滑动验证码geetest功能
2019/06/18 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
2020/02/27 PHP
统计jQuery中各字符串出现次数的工具
2012/05/03 Javascript
dwz 如何去掉ajaxloading具体代码
2013/05/22 Javascript
JS循环遍历JSON数据的方法
2014/07/08 Javascript
JavaScript学习笔记之JS事件对象
2015/01/22 Javascript
JQuery通过AJAX从后台获取信息显示在表格上并支持行选中
2015/09/15 Javascript
一个非常好用的文字滚动的案例,鼠标悬浮可暂停[两种方案任选]
2016/12/01 Javascript
jQuery鼠标移动图片上实现放大效果
2017/06/25 jQuery
JS中call()和apply()的功能及用法实例分析
2019/06/28 Javascript
详解vue3.0 diff算法的使用(超详细)
2020/07/01 Javascript
javascript实现数字时钟效果
2021/02/06 Javascript
python3利用smtplib通过qq邮箱发送邮件方法示例
2017/12/03 Python
Python 25行代码实现的RSA算法详解
2018/04/10 Python
使用Django启动命令行及执行脚本的方法
2018/05/29 Python
Python中pandas dataframe删除一行或一列:drop函数详解
2018/07/03 Python
Python脚本完成post接口测试的实例
2018/12/17 Python
Python使用pandas对数据进行差分运算的方法
2018/12/22 Python
python 基于dlib库的人脸检测的实现
2019/11/08 Python
pyhton中__pycache__文件夹的产生与作用详解
2019/11/24 Python
Python3 字典dictionary入门基础附实例
2020/02/10 Python
python字典的值可以修改吗
2020/06/29 Python
用python对oracle进行简单性能测试
2020/12/05 Python
用Python制作音乐海报
2021/01/26 Python
让IE9以下版本的浏览器兼容HTML5的方法
2014/03/12 HTML / CSS
小学教师自我鉴定
2013/11/07 职场文书
幼儿园教研活动方案
2014/01/19 职场文书
预备党员承诺书
2014/03/25 职场文书
期中考试反思800字
2014/05/01 职场文书
2015年七一建党节演讲稿
2015/03/19 职场文书
班主任寄语2016
2015/12/04 职场文书
写作指导:怎么书写竞聘演讲稿?
2019/07/04 职场文书
Django框架之路由用法
2022/06/10 Python