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 1.6发布 性能提升,同时包含大量破坏性变更
May 10 Javascript
javascript代码运行不出来执行错误的可能情况整理
Oct 18 Javascript
jQuery实现的一个tab切换效果内部还嵌有切换
Aug 10 Javascript
基于javascript、ajax、memcache和PHP实现的简易在线聊天室
Feb 03 Javascript
JavaScript判断手机号运营商是移动、联通、电信还是其他(代码简单)
Sep 25 Javascript
JavaScript数据存储 Cookie篇
Jul 02 Javascript
js实现图片切换(动画版)
Dec 25 Javascript
loading动画特效小结
Jan 22 Javascript
实现两个文本框同时输入的实例
Sep 25 Javascript
JavaScript实现正则去除a标签并保留内容的方法【测试可用】
Jul 18 Javascript
vscode下的vue文件格式化问题
Nov 28 Javascript
vue写h5页面的方法总结
Feb 12 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
珊瑚虫IP库浅析
2007/02/15 PHP
php 将bmp图片转为jpg等其他任意格式的图片
2009/06/29 PHP
ThinkPHP中处理表单中的注意事项
2014/11/22 PHP
Laravel5.1 框架表单验证操作实例详解
2020/01/07 PHP
javascript强大的日期函数代码分享
2013/09/04 Javascript
javascript闭包传参和事件的循环绑定示例探讨
2014/04/17 Javascript
javascript删除一个html元素节点的方法
2014/12/20 Javascript
JQuery记住用户名密码实现下次自动登录功能
2015/04/27 Javascript
用JavaScript显示浏览器客户端信息的超相近教程
2015/06/18 Javascript
在JavaScript中访问字符串的子串
2015/07/07 Javascript
JS实现可调整倒计时间代码分享
2015/08/18 Javascript
纯JS实现可拖拽表单的简单实例
2016/09/02 Javascript
前端 Vue.js 和 MVVM 详细介绍
2016/12/29 Javascript
轻松理解Javascript变量的相关问题
2017/01/20 Javascript
javascript  删除select中的所有option的实例
2017/09/17 Javascript
JavaScript实现单击网页任意位置打开新窗口与关闭窗口的方法
2017/09/21 Javascript
利用vue+elementUI实现部分引入组件的方法详解
2017/11/22 Javascript
Jquery的autocomplete插件用法及参数讲解
2019/03/12 jQuery
vue在自定义组件中使用v-model进行数据绑定的方法
2019/03/25 Javascript
基于javascript处理二进制图片流过程详解
2020/06/08 Javascript
[01:02:54]完美世界DOTA2联赛PWL S2 FTD vs GXR 第一场 11.22
2020/11/26 DOTA
Python random模块(获取随机数)常用方法和使用例子
2014/05/13 Python
整理Python最基本的操作字典的方法
2015/04/24 Python
python+mongodb数据抓取详细介绍
2017/10/25 Python
Django继承自带user表并重写的例子
2019/11/18 Python
Python爬虫后获取重定向url的两种方法
2021/01/19 Python
HTML5 本地存储 LocalStorage详解
2016/06/24 HTML / CSS
怎样实现H5+CSS3手指滑动切换图片的示例代码
2019/05/05 HTML / CSS
英国足球店:UK Soccer Shop
2017/11/19 全球购物
PyQt 如何创建自定义QWidget
2021/03/24 Python
2015年度护士个人工作总结
2015/04/09 职场文书
美容院员工规章制度
2015/08/05 职场文书
七年级作文之环保作文
2019/10/17 职场文书
如何用JavaScript实现一个数组惰性求值库
2021/05/05 Javascript
这样写python注释让代码更加的优雅
2021/06/02 Python
python geopandas读取、创建shapefile文件的方法
2021/06/29 Python