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 相关文章推荐
jQuery语法总结和注意事项小结
Nov 11 Javascript
使用Javascript简单实现图片无缝滚动
Dec 05 Javascript
JavaScript的类型、值和变量小结
Jul 09 Javascript
JavaScript_ECMA5数组新特性详解
Jun 12 Javascript
原生js编写基于面向对象的分页组件
Dec 05 Javascript
ionic+AngularJs实现获取验证码倒计时按钮
Apr 22 Javascript
jQuery实现菜单栏导航效果
Aug 15 jQuery
[原创]jQuery实现合并/追加数组并去除重复项的方法
Apr 11 jQuery
node版本管理工具n包使用教程详解
Nov 09 Javascript
vue 实现走马灯效果
Oct 28 Javascript
微信小程序开发摇一摇功能
Nov 22 Javascript
mpvue实现微信小程序快递单号查询代码
Apr 03 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.ini 中文版
2006/10/28 PHP
php木马攻击防御之道
2008/03/24 PHP
destoon二次开发模板及调用语法汇总
2014/06/21 PHP
thinkPHP中钩子的使用方法实例分析
2017/11/16 PHP
php输出反斜杠的实例方法
2019/09/19 PHP
php文件上传原理与实现方法详解
2019/12/20 PHP
javascript SocialHistory 检查访问者是否访问过某站点
2008/08/02 Javascript
关于javascript中的parseInt使用技巧
2009/09/03 Javascript
网站页面自动跳转实现方法PHP、JSP(下)
2010/08/01 Javascript
jquery的Theme和Theme Switcher使用小结
2010/09/08 Javascript
js中生成map对象的方法
2014/01/09 Javascript
javascript中this的四种用法
2015/05/11 Javascript
js判断文本框输入的内容是否为数字
2015/12/23 Javascript
通过说明与示例了解js五种设计模式
2019/06/17 Javascript
详解JavaScript 作用域
2020/07/14 Javascript
python实现文本去重且不打乱原本顺序
2016/01/26 Python
让python 3支持mysqldb的解决方法
2017/02/14 Python
基于python list对象中嵌套元组使用sort时的排序方法
2018/04/18 Python
python使用pipeline批量读写redis的方法
2019/02/18 Python
python scatter散点图用循环分类法加图例
2019/03/19 Python
python实现连连看辅助之图像识别延伸
2019/07/17 Python
python将字符串list写入excel和txt的实例
2019/07/20 Python
Django项目后台不挂断运行的方法
2019/08/31 Python
python给指定csv表格中的联系人群发邮件(带附件的邮件)
2019/12/31 Python
MAC平台基于Python Appium环境搭建过程图解
2020/08/13 Python
美国东北部户外服装和设备零售商:Eastern Mountain Sports
2016/10/05 全球购物
教育学专业毕业生的自我评价
2013/11/21 职场文书
过程装备与控制工程专业个人的求职信
2013/12/01 职场文书
施工员岗位职责
2014/03/16 职场文书
法定代表人授权委托书格式
2014/10/14 职场文书
2014年加油站站长工作总结
2014/12/23 职场文书
2014年服务员个人工作总结
2014/12/23 职场文书
创先争优承诺书
2015/01/20 职场文书
计算机专业自荐信范文
2015/03/26 职场文书
2015年学校总务工作总结
2015/07/20 职场文书
导游词之重庆钓鱼城
2019/09/19 职场文书