网络之美 JavaScript中Get和Set访问器的实现代码


Posted in Javascript onSeptember 19, 2010

标准的Get和Set访问器的实现

function Field(val){ 
this.value = val; 
} 
Field.prototype = { 
get value(){ 
return this._value; 
}, 
set value(val){ 
this._value = val; 
} 
}; 
var field = new Field("test"); 
field.value="test2"; 
//field.value will now return "test2"

在如下浏览器能正常工作:

网络之美 JavaScript中Get和Set访问器的实现代码

我们常用的实现方法可能是这样的:

function Field(val){ 
var value = val; this.getValue = function(){ 
return value; 
}; 
this.setValue = function(val){ 
value = val; 
}; 
} 
var field = new Field("test"); 
field.setValue("test2") 
field.getValue() // return "test2"

在DOM元素上Get和Set访问器的实现
HTMLElement.prototype.__defineGetter__("description", function () { 
return this.desc; 
}); 
HTMLElement.prototype.__defineSetter__("description", function (val) { 
this.desc = val; 
}); 
document.body.description = "Beautiful body"; 
// document.body.description will now return "Beautiful body";

在如下浏览器能正常工作:

网络之美 JavaScript中Get和Set访问器的实现代码

 

通过Object.defineProperty实现访问器

将来ECMAScript标准的扩展对象的方法会通过Object.defineProperty来实现,这也是为什么IE8就是通过这种方法来实现get和set访问器,看来微软还是很有远见的,遗憾的是目前只有IE8+和Chrome 5.0+支持,其它的浏览器都不支持,而且IE8+也只支持DOM元素,不过将来的版本将和Chrome一样支持普通的Javascript对象。
DOM元素上的Get和Set访问器的实现

Object.defineProperty(document.body, "description", { 
get : function () { 
return this.desc; 
}, 
set : function (val) { 
this.desc = val; 
} 
}); 
document.body.description = "Content container"; 
// document.body.description will now return "Content container"

在如下浏览器能正常工作:

网络之美 JavaScript中Get和Set访问器的实现代码

普通对象的Get和Set访问器的实现
var lost = { 
loc : "Island" 
}; 
Object.defineProperty(lost, "location", { 
get : function () { 
return this.loc; 
}, 
set : function (val) { 
this.loc = val; 
} 
}); 
lost.location = "Another island"; 
// lost.location will now return "Another island"

在如下浏览器能正常工作:

网络之美 JavaScript中Get和Set访问器的实现代码

本文总结

尽管微软的IE只是支持了Object.defineProperty,没有完美的实现Get和Set访问器,但是我们已经看到了IE有了很大的进步,特别是刚发布的IE9使用的新的javascript引擎,支持HTML5和CSS3,支持硬件加速等等,相信有一天各个浏览器都能完全拥抱标准,带来一个完美的WEB世界。

参考文献:

1. Getters and setters with JavaScript
2. JavaScript Getters and Setters

作者:梦想

Javascript 相关文章推荐
jquery 获取json数据实现代码
Apr 27 Javascript
javascript 一些用法小结
Sep 11 Javascript
javascript 词法作用域和闭包分析说明
Aug 12 Javascript
通过JS来判断页面控件是否获取焦点
Jan 03 Javascript
用JavaScript实现使用鼠标画线的示例代码
Aug 19 Javascript
javascript实现下雪效果【实例代码】
May 03 Javascript
如何用JS判断两个数字的大小
Jul 21 Javascript
jQuery Dialog 打开时自动聚焦的解决方法(两种方法)
Nov 24 Javascript
JavaScript高阶函数_动力节点Java学院整理
Jun 28 Javascript
vue中各组件之间传递数据的方法示例
Jul 27 Javascript
JS数组reduce()方法原理及使用技巧解析
Jul 14 Javascript
Vue 实现拨打电话操作
Nov 16 Javascript
asp.net下使用jquery 的ajax+WebService+json 实现无刷新取后台值的实现代码
Sep 19 #Javascript
jquery异步循环获取功能实现代码
Sep 19 #Javascript
JavaScript随机排序(随即出牌)
Sep 17 #Javascript
js下通过getList函数实现分页效果的代码
Sep 17 #Javascript
前端开发的开始---基于面向对象的Ajax类
Sep 17 #Javascript
基于jquery的仿百度的鼠标移入图片抖动效果
Sep 17 #Javascript
js下用eval生成JSON对象
Sep 17 #Javascript
You might like
php $_SERVER["REQUEST_URI"]获取值的通用解决方法
2010/06/21 PHP
两种设置php载入页面时编码的方法
2014/07/29 PHP
PHP使用array_merge重新排列数组下标的方法
2015/07/22 PHP
PHP使用PHPexcel导入导出数据的方法
2015/11/14 PHP
微信公众号模板消息群发php代码示例
2016/12/29 PHP
PHP如何搭建百度Ueditor富文本编辑器
2018/09/21 PHP
ThinkPHP5.0框架验证码功能实现方法【基于第三方扩展包】
2019/03/11 PHP
PHP解密支付宝小程序的加密数据、手机号的示例代码
2021/02/26 PHP
javascript获取当前ip的代码
2009/05/10 Javascript
ExtJS Store的数据访问与更新问题
2010/04/28 Javascript
当某个文本框成为焦点时即清除文本框内容
2014/04/28 Javascript
鼠标移到图片上变大显示而不是放大镜效果
2014/06/15 Javascript
javascript继承机制实例详解
2014/11/20 Javascript
在DWR中实现直接获取一个JAVA类的返回值的两种方法
2016/12/25 Javascript
js验证手机号、密码、短信验证码代码工具类
2020/06/24 Javascript
vue 实现 ios 原生picker 效果及实现思路解析
2017/12/06 Javascript
35个最好用的Vue开源库(史上最全)
2019/01/03 Javascript
原生js+ajax分页组件
2020/01/30 Javascript
解决vue中的无限循环问题
2020/07/27 Javascript
JS实现4位随机验证码
2020/10/19 Javascript
python基于itchat实现微信群消息同步机器人
2017/02/27 Python
python中实现数组和列表读取一列的方法
2018/04/03 Python
Django中STATIC_ROOT和STATIC_URL及STATICFILES_DIRS浅析
2018/05/08 Python
Python高级用法总结
2018/05/26 Python
使用python实现对元素的长截图功能
2019/11/14 Python
Django全局启用登陆验证login_required的方法
2020/06/02 Python
韩国流行时尚女装网站:Dintchina(中文)
2018/07/19 全球购物
大学生学习2014全国两会心得体会
2014/03/13 职场文书
事业单位绩效考核实施方案
2014/03/27 职场文书
优秀的个人求职信范文
2014/05/09 职场文书
医院标语大全
2014/06/23 职场文书
环卫工人慰问信
2015/02/15 职场文书
长征观后感
2015/06/09 职场文书
2016年三严三实党课学习心得体会
2016/01/06 职场文书
Python基础之赋值,浅拷贝,深拷贝的区别
2021/04/30 Python
Python内置类型集合set和frozenset的使用详解
2022/04/26 Python