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 EasyUI 中文API Layout(Tabs)
Apr 27 Javascript
jQuery ajax BUG:object doesn't support this property or method
Jul 06 Javascript
JavaScript中获取元素索引的函数
Sep 10 Javascript
浅析JavaScript原型继承的陷阱
Dec 03 Javascript
JS如何将数字类型转化为没3个一个逗号的金钱格式
Jan 27 Javascript
javascript模拟枚举的简单实例
Mar 06 Javascript
微信开发之调起摄像头、本地展示图片、上传下载图片实例
Dec 08 Javascript
vue基于mint-ui的城市选择3级联动的示例
Oct 25 Javascript
Vue 实现点击空白处隐藏某节点的三种方式(指令、普通、遮罩)
Oct 23 Javascript
js实现简单点赞操作
Mar 17 Javascript
vue+node 实现视频在线播放的实例代码
Oct 19 Javascript
vue实现无缝轮播效果(跑马灯)
May 14 Vue.js
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 对输入信息的进行安全过滤的函数代码
2012/06/29 PHP
php导入csv文件碰到乱码问题的解决方法
2014/02/10 PHP
codeigniter教程之上传视频并使用ffmpeg转flv示例
2014/02/13 PHP
ThinkPHP表单自动验证实例
2014/10/13 PHP
Thinkphp连表查询及数据导出方法示例
2016/10/15 PHP
CutePsWheel javascript libary 控制输入文本框为可使用滚轮控制的js库
2010/02/07 Javascript
可以将word转成html的js代码
2010/04/11 Javascript
JavaScript中使用replace结合正则实现replaceAll的效果
2010/06/04 Javascript
基于jquery的一个OutlookBar类,动态创建导航条
2010/11/19 Javascript
基于JQuery的浮动DIV显示提示信息并自动隐藏
2011/02/11 Javascript
nodeType属性返回被选节点的节点类型介绍
2013/11/22 Javascript
Nodejs极简入门教程(三):进程
2014/10/27 NodeJs
ES6中如何使用Set和WeakSet
2016/03/10 Javascript
Vue.js 60分钟快速入门教程
2017/03/28 Javascript
js上传图片预览的实现方法
2017/05/09 Javascript
vue-router实现组件间的跳转(参数传递)
2017/11/07 Javascript
vue踩坑记录之数组定义和赋值问题
2019/03/20 Javascript
layui select 禁止点击的实现方法
2019/09/05 Javascript
python清理子进程机制剖析
2017/11/23 Python
wxpython+pymysql实现用户登陆功能
2019/11/19 Python
pycharm新建Vue项目的方法步骤(图文)
2020/03/04 Python
浅谈Python程序的错误:变量未定义
2020/06/02 Python
导致python中import错误的原因是什么
2020/07/01 Python
python 5个实用的技巧
2020/09/27 Python
澳大利亚美容产品及化妆品在线:Activeskin
2020/06/03 全球购物
测控技术与通信工程毕业生自荐信范文
2013/12/28 职场文书
校园新闻广播稿
2014/01/10 职场文书
军训自我鉴定
2014/01/22 职场文书
2014年公司植树节活动方案
2014/03/04 职场文书
人事行政专员岗位职责
2014/07/23 职场文书
服务行业演讲稿
2014/09/02 职场文书
四风问题个人对照检查剖析材料
2014/09/27 职场文书
群众路线组织生活会发言材料
2014/10/17 职场文书
创业计划书之蛋糕店
2019/08/29 职场文书
Python打包为exe详细教程
2021/05/18 Python
我的收音机情缘
2022/04/05 无线电