网络之美 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压缩工具下载集合
Mar 06 Javascript
JS中showModalDialog 的使用解析
Apr 17 Javascript
js、css、img等浏览器缓存问题的2种解决方案
Oct 23 Javascript
Node.js中使用Buffer编码、解码二进制数据详解
Aug 16 Javascript
jquery提示效果实例分析
Nov 25 Javascript
node.js中的buffer.Buffer.byteLength方法使用说明
Dec 10 Javascript
javascript实现点击按钮弹出一个可关闭层窗口同时网页背景变灰的方法
May 13 Javascript
js实现文本框宽度自适应文本宽度的方法
Aug 13 Javascript
基于require.js的使用(实例讲解)
Sep 07 Javascript
JavaScript 下载svg图片为png格式
Jun 21 Javascript
Angular6中使用Swiper的方法示例
Jul 09 Javascript
jQuery Ajax实现Select多级关联动态绑定数据的实例代码
Oct 26 jQuery
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实现多条件查询实例代码
2010/07/17 PHP
浅析php中json_encode()和json_decode()
2014/05/25 PHP
ThinkPHP上使用多说评论插件的方法
2014/10/31 PHP
php结合ACCESS的跨库查询功能
2015/06/12 PHP
php格式化时间戳
2016/12/17 PHP
PHP 无限级分类
2017/05/04 PHP
javascript 在firebug调试时用console.log的方法
2012/05/10 Javascript
为指定的元素添加遮罩层的示例代码
2014/01/15 Javascript
jquery.ajax的url中传递中文乱码问题的解决方法
2014/02/07 Javascript
javascript实现页面内关键词高亮显示代码
2014/04/03 Javascript
jQuery中fadeOut()方法用法实例
2014/12/24 Javascript
PHP守护进程实例
2015/03/06 Javascript
JS实现自动定时切换的简洁网页选项卡效果
2015/10/13 Javascript
浅谈JavaScript对象的创建方式
2016/06/13 Javascript
Vue SPA 首屏优化方案
2021/02/26 Vue.js
举例讲解Python编程中对线程锁的使用
2016/07/12 Python
Python线程创建和终止实例代码
2018/01/20 Python
使用实现XlsxWriter创建Excel文件并编辑
2018/05/04 Python
Falsk 与 Django 过滤器的使用与区别详解
2019/06/04 Python
Python3内置模块random随机方法小结
2019/07/13 Python
关于Python内存分配时的小秘密分享
2019/09/05 Python
python 图像处理画一个正弦函数代码实例
2019/09/10 Python
python实现将一维列表转换为多维列表(numpy+reshape)
2019/11/29 Python
python属于哪种语言
2020/08/16 Python
西班牙英格列斯百货官网:El Corte Inglés
2016/09/25 全球购物
英国街头品牌:Bee Inspired Clothing
2018/02/12 全球购物
护理学毕业生自荐信
2013/10/02 职场文书
思想政治自我鉴定
2013/10/06 职场文书
应聘医药代表职位求职信
2013/10/21 职场文书
综合实践活动方案
2014/02/14 职场文书
小学生常见病防治方案
2014/06/06 职场文书
小学关爱留守儿童活动方案
2014/08/25 职场文书
2014年机关党建工作总结
2014/11/11 职场文书
2014年工商所工作总结
2014/12/09 职场文书
青岛导游词
2015/02/12 职场文书
七年级作文之环保作文
2019/10/17 职场文书