网络之美 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下给元素添加事件的方法与代码
Aug 13 Javascript
Javascript日期对象的dateAdd与dateDiff方法
Nov 18 Javascript
Javascript模块化编程(一)模块的写法最佳实践
Jan 17 Javascript
JavaScript中的正则表达式简明总结
Apr 04 Javascript
jquery实现通用版鼠标经过淡入淡出效果
Jun 15 Javascript
将HTML格式的String转化为HTMLElement的实现方法
Aug 07 Javascript
jQuery插件slick实现响应式移动端幻灯片图片切换特效
Apr 12 Javascript
JavaScript DOM操作表格及样式
Apr 13 Javascript
js实现(全选)多选按钮的方法【附实例】
Mar 30 Javascript
JS实现基于Sketch.js模拟成群游动的蝌蚪运动动画效果【附demo源码下载】
Aug 18 Javascript
es6中Promise 对象基本功能与用法实例分析
Feb 23 Javascript
Vue基于localStorage存储信息代码实例
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编写daemon process 实例详解
2016/11/13 PHP
PHP中->和=>的含义及使用示例解析
2020/08/06 PHP
新浪刚打开页面出来的全屏广告代码
2007/04/02 Javascript
利用Ext Js生成动态树实例代码
2008/09/08 Javascript
Javascript基础教程之比较操作符
2015/01/18 Javascript
浅谈jQuery中的事件
2015/03/23 Javascript
浅析jquery unbind()方法移除元素绑定的事件
2016/05/24 Javascript
js小数计算小数点后显示多位小数的实现方法
2016/05/30 Javascript
AngularJS表单验证中级篇(3)
2016/09/28 Javascript
深入理解JS实现快速排序和去重
2016/10/17 Javascript
Vue.js列表渲染绑定jQuery插件的正确姿势
2017/06/29 jQuery
angularjs select 赋值 ng-options配置方法
2018/02/28 Javascript
Layui 设置select下拉框自动选中某项的方法
2018/08/14 Javascript
React 父子组件通信的实现方法
2019/12/05 Javascript
Vue的双向数据绑定实现原理解析
2020/02/17 Javascript
Python向日志输出中添加上下文信息
2017/05/24 Python
Tornado Web Server框架编写简易Python服务器
2018/07/28 Python
使用python对文件中的数值进行累加的实例
2018/11/28 Python
Python数据集切分实例
2018/12/08 Python
python 计算平均平方误差(MSE)的实例
2019/06/29 Python
python切片的步进、添加、连接简单操作示例
2019/07/11 Python
django-rest-framework 自定义swagger过程详解
2019/07/18 Python
Python如何使用Gitlab API实现批量的合并分支
2019/11/27 Python
HTML5引入的新数组TypedArray介绍
2012/12/24 HTML / CSS
Html5 web本地存储实例详解
2016/07/28 HTML / CSS
PREMIUM-MALL法国:行李、箱包及配件在线
2019/05/30 全球购物
Talbots官网:美国成熟女装品牌
2019/11/15 全球购物
日本亚马逊官方网站:Amazon.co.jp
2020/04/14 全球购物
党章学习思想汇报
2014/01/14 职场文书
《再见了,亲人》教学反思
2014/02/26 职场文书
赔偿协议书范本
2014/04/15 职场文书
普通话演讲稿
2014/09/03 职场文书
异地年检委托书范本
2014/09/24 职场文书
流动人口婚育证明
2014/10/19 职场文书
中英文求职信范文
2015/03/19 职场文书
python之np.argmax()及对axis=0或者1的理解
2021/06/02 Python