网络之美 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显示选择目录对话框的代码
Nov 10 Javascript
js判断一个元素是否为另一个元素的子元素的代码
Mar 21 Javascript
JQuery实现鼠标移动到图片上显示边框效果
Jan 09 Javascript
JQuery与JS里submit()的区别示例介绍
Feb 17 Javascript
jquery制作图片时钟特效
Mar 30 Javascript
Angular2自定义分页组件
Apr 19 Javascript
使用angular帮你实现拖拽的示例
Jul 05 Javascript
微信小程序实现随机验证码功能
Dec 20 Javascript
Three.js实现简单3D房间布局
Dec 30 Javascript
详解Vue底部导航栏组件
May 02 Javascript
vue项目打包为APP,静态资源正常显示,但API请求不到数据的操作
Sep 12 Javascript
vue实现点击出现操作弹出框的示例
Nov 05 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下载CSS文件中的图片的代码
2013/09/24 PHP
PHP count()函数讲解
2019/02/03 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
2019/09/10 PHP
DWR实现模拟Google搜索效果实现原理及代码
2013/01/30 Javascript
js如何获取object类型里的键值
2014/02/18 Javascript
通过url查找a元素并点击
2014/04/09 Javascript
.NET微信公众号开发之创建自定义菜单
2015/07/16 Javascript
js窗口关闭提示信息(兼容IE和firefox)
2015/10/23 Javascript
React Native 搭建开发环境的方法步骤
2017/10/30 Javascript
vue transition 在子组件中失效的解决
2019/11/12 Javascript
vue下载二进制流图片操作
2020/10/26 Javascript
python 获取文件列表(或是目录例表)
2009/03/25 Python
python的Template使用指南
2014/09/11 Python
Python数据可视化编程通过Matplotlib创建散点图代码示例
2017/12/09 Python
Python微信公众号开发平台
2018/01/25 Python
python处理数据,存进hive表的方法
2018/07/04 Python
对Pyhon实现静态变量全局变量的方法详解
2019/01/11 Python
使用pyecharts生成Echarts网页的实例
2019/08/12 Python
Python使用Beautiful Soup爬取豆瓣音乐排行榜过程解析
2019/08/15 Python
python实现广度优先搜索过程解析
2019/10/19 Python
Django 实现外键去除自动添加的后缀‘_id’
2019/11/15 Python
Python统计时间内的并发数代码实例
2019/12/28 Python
Nginx+Uwsgi+Django 项目部署到服务器的思路详解
2020/05/08 Python
Python Opencv轮廓常用操作代码实例解析
2020/09/01 Python
Calphalon美国官网:美国顶级锅具品牌
2020/02/05 全球购物
写好求职信第一句话的技巧
2013/10/26 职场文书
信息学院毕业生自荐信范文
2014/03/04 职场文书
财务总监管理岗位职责
2014/03/08 职场文书
优秀广告词大全
2014/03/19 职场文书
《灰椋鸟》教学反思
2014/04/27 职场文书
李敖北大演讲稿
2014/05/24 职场文书
2014最新开业庆典策划方案(5篇)
2014/09/15 职场文书
2015年终个人政治思想工作总结
2015/11/24 职场文书
2019企业文化管理制度范本!
2019/08/06 职场文书
spring注解 @PropertySource配置数据源全流程
2022/03/25 Java/Android
Python实现猜拳与猜数字游戏的方法详解
2022/04/06 Python