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 相关文章推荐
javascript 学习之旅 (3)
Feb 05 Javascript
js日期相关函数总结分享
Oct 15 Javascript
利用函数的惰性载入提高javascript代码执行效率
May 05 Javascript
jquery实现用户信息修改验证输入方法汇总
Jul 18 Javascript
BootStrap下拉菜单和滚动监听插件实现代码
Sep 26 Javascript
深入理解Vue transition源码分析
Jul 30 Javascript
JS中精巧的自动柯里化实现方法
Dec 12 Javascript
JS删除数组里的某个元素方法
Feb 03 Javascript
angular 数据绑定之[]和{{}}的区别
Sep 25 Javascript
详解promise.then,process.nextTick, setTimeout 以及 setImmediate的执行顺序
Nov 21 Javascript
转换layUI的数据表格中的日期格式方法
Sep 19 Javascript
小程序实现日历左右滑动效果
Oct 21 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 获取可变函数参数的函数
2009/08/26 PHP
ThinkPHP 连接Oracle数据库的详细教程[全]
2012/07/16 PHP
php数组随机排序实现方法
2015/06/13 PHP
php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法
2016/10/12 PHP
ThinkPHP3.2.3框架邮件发送功能图文实例详解
2019/04/23 PHP
Laravel6.18.19如何优雅的切换发件账户
2020/06/14 PHP
Javascript操纵Cookie实现购物车程序
2007/02/15 Javascript
aspx中利用js实现确认删除代码
2010/07/22 Javascript
基于jquery固定于顶部的导航响应浏览器滚动条事件
2014/11/02 Javascript
原生JS实现响应式瀑布流布局
2015/04/02 Javascript
基于javascript显示当前时间以及倒计时功能
2016/03/18 Javascript
学习Javascript闭包(Closure)知识
2016/08/07 Javascript
jquery操作checkbox火狐下第二次无法勾选的解决方法
2016/10/10 Javascript
解决Window10系统下Node安装报错的问题分析
2016/12/13 Javascript
微信小程序 122100版本更新问题解决方案
2016/12/22 Javascript
js for循环倒序输出数组元素的实例
2017/03/01 Javascript
JS简单实现滑动加载数据的方法示例
2017/10/18 Javascript
vue.js实现点击后动态添加class及删除同级class的实现代码
2018/04/04 Javascript
AngularJS实现的base64编码与解码功能示例
2018/05/17 Javascript
JavaScript函数式编程(Functional Programming)纯函数用法分析
2019/05/22 Javascript
python获取本地计算机名字的方法
2015/04/29 Python
python查询sqlite数据表的方法
2015/05/08 Python
Python中绑定与未绑定的类方法用法分析
2016/04/29 Python
Python Xml文件添加字节属性的方法
2018/03/31 Python
Python框架Flask的基本数据库操作方法分析
2018/07/13 Python
TensorFlow2.0:张量的合并与分割实例
2020/01/19 Python
Python装饰器用法与知识点小结
2020/03/09 Python
PyQt实现计数器的方法示例
2021/01/18 Python
利用Canvas模仿百度贴吧客户端loading小球的方法示例
2017/08/13 HTML / CSS
HTML5给汉字加拼音收起展开组件的实现代码
2020/04/08 HTML / CSS
英国最大的电子零件及配件零售商:Partmaster
2017/04/24 全球购物
Sephora丝芙兰泰国官方网站:国际知名化妆品购物
2017/11/15 全球购物
小蚁科技官方商店:YI Technology
2019/08/23 全球购物
简述安装Slackware Linux系统的过程
2012/01/12 面试题
营销与策划个人求职信
2013/09/22 职场文书
2014教师个人自我评价范文
2014/09/13 职场文书