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 相关文章推荐
让firefox支持IE的一些方法的javascript扩展函数代码
Jan 02 Javascript
实现网页页面跳转的几种方法(meta标签、js实现、php实现)
May 20 Javascript
利用JavaScript脚本实现滚屏效果的方法
Jul 07 Javascript
Js遍历键值对形式对象或Map形式的方法
Aug 08 Javascript
超详细的JS弹出窗口代码大全
Apr 18 Javascript
js阻止移动端页面滚动的两种方法
Jan 25 Javascript
JS实现按钮颜色切换效果
Sep 05 Javascript
jquery ajaxfileupload异步上传插件
Nov 21 jQuery
详解webpack-dev-server使用方法
Sep 14 Javascript
Vue运用transition实现过渡动画
May 06 Javascript
使用JS实现简易计算器
Jun 14 Javascript
原生JavaScript实现简单五子棋游戏
Jun 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 addslashes 函数详细分析说明
2009/06/23 PHP
PHP zlib扩展实现页面GZIP压缩输出
2010/06/17 PHP
destoon后台网站设置变成空白的解决方法
2014/06/21 PHP
php实现字符串首字母转换成大写的方法
2015/03/17 PHP
php通过获取头信息判断图片类型的方法
2015/06/26 PHP
Laravel框架实现调用百度翻译API功能示例
2019/05/30 PHP
js 分栏效果实现代码
2009/08/29 Javascript
用jquery实现自定义风格的滑动条实现代码
2011/04/26 Javascript
JS声明变量背后的编译原理剖析
2012/12/28 Javascript
JS截取url中问号后面参数的值信息
2014/04/29 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/08/22 Javascript
Ionic实现页面下拉刷新(ion-refresher)功能代码
2016/06/03 Javascript
jquery+css3问卷答题卡翻页动画效果示例
2016/10/26 Javascript
jQuery实现动态添加节点与遍历节点功能示例
2017/11/09 jQuery
nodejs操作mongodb的填删改查模块的制作及引入实例
2018/01/02 NodeJs
35个最好用的Vue开源库(史上最全)
2019/01/03 Javascript
JavaScript字符串处理常见操作方法小结
2019/11/15 Javascript
Python 自动安装 Rising 杀毒软件
2009/04/24 Python
Python的函数嵌套的使用方法
2014/01/24 Python
Python实现全角半角转换的方法
2014/08/18 Python
python中pass语句用法实例分析
2015/04/30 Python
Python脚本实现12306火车票查询系统
2016/09/30 Python
python通过socket实现多个连接并实现ssh功能详解
2017/11/08 Python
Django 创建/删除用户的示例代码
2019/07/24 Python
python实现回旋矩阵方式(旋转矩阵)
2019/12/04 Python
Python -m参数原理及使用方法解析
2020/08/21 Python
python 日志模块logging的使用场景及示例
2021/01/04 Python
css3背景图片透明叠加属性cross-fade简介及用法实例
2013/01/08 HTML / CSS
LG西班牙网上商店:Tienda LG Online Es
2019/07/30 全球购物
购买正版游戏和游戏激活码:Green Man Gaming
2019/11/06 全球购物
adidas菲律宾官网:adidas PH
2020/02/07 全球购物
超市创业计划书
2014/04/24 职场文书
校园环保标语
2014/06/13 职场文书
借款协议书
2014/09/16 职场文书
2016个人先进事迹材料范文
2016/03/01 职场文书
详解Laravel制作API接口
2021/05/31 PHP