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 05 Javascript
JavaScript用Number方法实现string转int
May 13 Javascript
jquery实现图片左右切换的方法
May 07 Javascript
jQuery简单实现仿京东商城的左侧菜单效果代码
Sep 09 Javascript
jQuery获取浏览器类型和版本号的方法
Jul 05 Javascript
前端弹出对话框 js实现ajax交互
Sep 09 Javascript
利用vue实现模态框组件
Dec 19 Javascript
详解vuex 中的 state 在组件中如何监听
May 23 Javascript
原生JS实现图片懒加载(lazyload)实例
Jun 13 Javascript
Three.js实现浏览器变动时进行自适应的方法
Sep 26 Javascript
使用3D引擎threeJS实现星空粒子移动效果
Sep 13 Javascript
vue mvvm数据响应实现
Nov 11 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一些服务器端特性的配置加强php的安全
2006/10/09 PHP
php 面试碰到过的问题 在此做下记录
2011/06/09 PHP
ThinkPHP实现带验证码的文件上传功能实例
2014/11/01 PHP
Laravel自定义 封装便捷返回Json数据格式的引用方法
2019/09/29 PHP
在phpstudy集成环境下的nginx服务器下配置url重写
2019/12/02 PHP
PHP7 错误处理机制修改
2021/03/09 PHP
javascript结合html5 canvas实现(可调画笔颜色/粗细/橡皮)的涂鸦板
2013/04/27 Javascript
js innerHTML 改变div内容的方法
2013/08/03 Javascript
解析jQuery的三种bind/One/Live事件绑定使用方法
2013/12/30 Javascript
Ext修改GridPanel数据和字体颜色、css属性等
2014/06/13 Javascript
JavaScript Promise启示录
2014/08/12 Javascript
Javascript实现鼠标右键特色菜单
2015/08/04 Javascript
浅谈js多维数组和hash数组定义和使用
2016/07/27 Javascript
用jmSlip编写移动端顶部日历选择控件
2016/10/24 Javascript
jQuery展示表格点击变色、全选、删除
2017/01/05 Javascript
Node.js查找当前目录下文件夹实例代码
2017/03/07 Javascript
gulp安装以及打包合并的方法教程
2017/11/19 Javascript
浅谈JavaScript中this的指向问题
2020/07/28 Javascript
python实现网页链接提取的方法分享
2014/02/25 Python
python3.3使用tkinter开发猜数字游戏示例
2014/03/14 Python
Python中还原JavaScript的escape函数编码后字符串的方法
2014/08/22 Python
web.py获取上传文件名的正确方法
2014/08/26 Python
python进阶教程之循环相关函数range、enumerate、zip
2014/08/30 Python
分享一个常用的Python模拟登陆类
2015/03/29 Python
Python实现基本线性数据结构
2016/08/22 Python
Python实现查看系统启动项功能示例
2018/05/10 Python
Django REST framework视图的用法
2019/01/16 Python
Python 去除字符串中指定字符串
2020/03/05 Python
借助Paramiko通过Python实现linux远程登陆及sftp的操作
2020/03/16 Python
解决python父线程关闭后子线程不关闭问题
2020/04/25 Python
解决echarts中饼图标签重叠的问题
2020/05/16 Python
推荐值得学习的12款python-web开发框架
2020/08/10 Python
Python实现粒子群算法的示例
2021/02/14 Python
Html5页面上如何禁止手机虚拟键盘弹出
2020/03/19 HTML / CSS
2015年营销工作总结范文
2015/04/23 职场文书
python 如何获取页面所有a标签下href的值
2021/05/06 Python