网络之美 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避免代码的重复执行经验技巧分享
Apr 17 Javascript
IE中document.createElement的iframe无法设置属性name的解决方法
Sep 14 Javascript
浅析JavaScript中命名空间namespace模式
Jun 22 Javascript
javaScript 事件绑定、事件冒泡、事件捕获和事件执行顺序整理总结
Oct 10 Javascript
Bootstrap导航条的使用和理解3
Dec 14 Javascript
AngularJS select设置默认值的实现方法
Aug 25 Javascript
vue-router相关基础知识及工作原理
Mar 16 Javascript
微信小程序websocket实现即时聊天功能
May 21 Javascript
JQuery获得内容和属性方法解析
May 30 jQuery
解决vue一个页面中复用同一个echarts组件的问题
Jul 19 Javascript
微信小程序完美解决scroll-view高度自适应问题的方法
Aug 08 Javascript
谈谈JavaScript中的垃圾回收机制
Sep 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
在PHP中使用模板的方法
2008/05/24 PHP
php中常用的预定义变量小结
2012/05/09 PHP
PHP中array_keys和array_unique函数源码的分析
2016/02/26 PHP
PHP获取当前URL路径的处理方法(适用于多条件筛选列表)
2017/02/10 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
thinkPHP5分页功能实现方法分析
2017/10/25 PHP
js替换字符串的所有示例代码
2013/07/23 Javascript
使用jquery hover事件实现表格的隔行换色功能示例
2013/09/03 Javascript
javascript中使用正则计算中文长度的例子
2014/04/29 Javascript
基于JS实现textarea中获取动态剩余字数的方法
2016/05/25 Javascript
使用JQuery中的trim()方法去掉前后空格
2016/09/16 Javascript
详解js树形控件—zTree使用总结
2016/12/28 Javascript
js实现滑动到页面底部自动加载更多功能
2017/02/15 Javascript
JS中的多态实例详解
2017/10/15 Javascript
echarts鼠标覆盖高亮显示节点及关系名称详解
2018/03/17 Javascript
解决eclipse中没有js代码提示的问题
2018/10/10 Javascript
js实现烟花特效
2020/03/02 Javascript
JavaScript命令模式原理与用法实例详解
2020/03/10 Javascript
详解Vue3中对VDOM的改进
2020/04/23 Javascript
如何利用JS将手机号中间四位变成*号
2020/09/29 Javascript
Python中的with语句与上下文管理器学习总结
2016/06/28 Python
python 日期操作类代码
2018/05/05 Python
pycharm 配置远程解释器的方法
2018/10/28 Python
python开发前景如何
2020/06/11 Python
如何快速理解python的垃圾回收机制
2020/09/01 Python
Python字符串及文本模式方法详解
2020/09/10 Python
python中uuid模块实例浅析
2020/12/29 Python
Myprotein加拿大官网:欧洲第一的运动营养品牌
2018/01/06 全球购物
英国珠宝网站Argento: PANDORA、Olivia Burton和Nomination等
2020/05/08 全球购物
资深生产主管自我评价
2013/09/22 职场文书
技术总监的工作职责
2013/11/13 职场文书
消防应急演练方案
2014/02/12 职场文书
学生会副主席竞聘书
2014/03/31 职场文书
计算机专业自荐信
2015/03/05 职场文书
小学家长意见怎么写
2015/06/03 职场文书
vue-cli4.5.x快速搭建项目
2021/05/30 Vue.js