网络之美 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 相关文章推荐
JavaScript中的console.dir()函数介绍
Dec 29 Javascript
js实现3D图片逐张轮播幻灯片特效代码分享
Sep 09 Javascript
JavaScript中rem布局在react中的应用
Dec 09 Javascript
Vue.directive自定义指令的使用详解
Mar 10 Javascript
JavaScript 过滤关键字
Mar 20 Javascript
Vue单页式应用(Hash模式下)实现微信分享的实例
Jul 21 Javascript
JS与CSS3实现图片响应鼠标移动放大效果示例
May 04 Javascript
layui在form表单页面通过Validform加入简单验证的方法
Sep 06 Javascript
JavaScript制作3D旋转相册
Aug 02 Javascript
使用Vue 自定义文件选择器组件的实例代码
Mar 04 Javascript
Vue实现可移动水平时间轴
Jun 29 Javascript
详解如何在Canvas中添加事件的方法
Apr 17 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
phpMyAdmin链接MySql错误 个人解决方案
2009/12/28 PHP
PHP多线程批量采集下载美女图片的实现代码(续)
2013/06/03 PHP
php实现改变图片直接打开为下载的方法
2015/04/14 PHP
基于php的微信公众平台开发入门实例
2015/04/15 PHP
10个对初学者非常有用的PHP技巧
2016/04/06 PHP
PHP对XML内容进行修改和删除实例代码
2016/10/26 PHP
jQuery侧边栏随窗口滚动实现方法
2013/03/04 Javascript
利用JQuery和Servlet实现跨域提交请求示例分享
2014/02/12 Javascript
详细分析使用AngularJS编程中提交表单的方式
2015/06/19 Javascript
基于PHP和Mysql相结合使用jqGrid读取数据并显示
2015/12/02 Javascript
jquery遍历函数siblings()用法实例
2015/12/24 Javascript
Angular的$http的ajax的请求操作(推荐)
2017/01/10 Javascript
Bootstrap实现提示框和弹出框效果
2017/01/11 Javascript
js a标签点击事件
2017/03/30 Javascript
JS实现的走迷宫小游戏完整实例
2017/07/19 Javascript
在React中如何优雅的处理事件响应详解
2017/07/24 Javascript
基于zTree树形菜单的使用实例
2017/12/25 Javascript
javascript中一些奇葩的日期换算方法总结
2018/11/14 Javascript
js实现网页同时进行多个倒计时功能
2019/02/25 Javascript
layer.prompt输入层的例子
2019/09/24 Javascript
iview实现图片上传功能
2020/06/29 Javascript
[03:37]2014DOTA2国际邀请赛 主赛事第一日胜者组TOPPLAY
2014/07/19 DOTA
python实现图片批量剪切示例
2014/03/25 Python
Python中的CSV文件使用"with"语句的方式详解
2018/10/16 Python
使用Python将Mysql的查询数据导出到文件的方法
2019/02/25 Python
python中的句柄操作的方法示例
2019/06/20 Python
解决pycharm下os.system执行命令返回有中文乱码的问题
2019/07/07 Python
解决安装python3.7.4报错Can''t connect to HTTPS URL because the SSL module is not available
2019/07/31 Python
python实现高斯投影正反算方式
2020/01/17 Python
基于CentOS搭建Python Django环境过程解析
2020/08/24 Python
H5最强接口之canvas实现动态图形功能
2019/05/31 HTML / CSS
日本即尚网:JSHOPPERS.com(支持中文)
2019/12/03 全球购物
国贸类专业毕业生的求职信分享
2013/12/08 职场文书
同学毕业留言寄语
2015/02/27 职场文书
幼儿园安全教育随笔
2015/08/14 职场文书
JavaScript事件的委托(代理)的用法示例详解
2022/02/18 Javascript