网络之美 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 相关文章推荐
jquery的键盘事件修改代码
Feb 24 Javascript
jQuery控制iFrame(实例代码)
Nov 19 Javascript
jQuery操作select下拉框的text值和value值的方法
May 31 Javascript
Javascript快速排序算法详解
Dec 03 Javascript
JavaScript+html5 canvas绘制的小人效果
Jan 27 Javascript
关于JavaScript和jQuery的类型判断详解
Oct 08 Javascript
JavaScript中Array对象用法实例总结
Nov 29 Javascript
JavaScript之Date_动力节点Java学院整理
Jun 28 Javascript
Vue2.0基于vue-cli+webpack父子组件通信(实例讲解)
Sep 14 Javascript
详解webpack模块加载器兼打包工具
Sep 11 Javascript
JS/jQuery实现简单的开关灯效果【案例】
Feb 19 jQuery
js实现拖拽与碰撞检测
Sep 18 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启动windows应用程序、执行bat批处理、执行cmd命令的方法(exec、system函数详解)
2014/10/20 PHP
10个值得深思的PHP面试题
2016/11/14 PHP
Zend Framework入门教程之Zend_Registry组件用法详解
2016/12/09 PHP
php图像验证码生成代码
2017/06/08 PHP
IE和Mozilla的兼容性汇总event
2007/08/12 Javascript
javascript权威指南 学习笔记之null和undefined
2011/09/25 Javascript
利用json获取字符出现次数的代码
2012/03/22 Javascript
javascript定时变换图片实例代码
2013/03/17 Javascript
html+javascript实现可拖动可提交的弹出层对话框效果
2013/08/05 Javascript
js给onclick赋值传参数的两种方法
2013/11/25 Javascript
js判断页面中是否有指定控件的简单实例
2014/03/04 Javascript
Jquery+asp.net后台数据传到前台js进行解析的方法
2014/05/11 Javascript
table insertRow、deleteRow定义和用法总结
2014/05/14 Javascript
JQuery选择器绑定事件及修改内容的方法
2015/01/23 Javascript
利用Javascript裁剪图片并存储的简单实现
2017/03/13 Javascript
Vue.js实现在下拉列表区域外点击即可关闭下拉列表的功能(自定义下拉列表)
2017/05/30 Javascript
w3c编程挑战_初级脚本算法实战篇
2017/06/23 Javascript
JS动态添加元素及绑定事件造成程序重复执行解决
2017/12/07 Javascript
详解vuex commit保存数据技巧
2018/12/25 Javascript
在Vue项目中引入JQuery-ui插件的讲解
2019/01/27 jQuery
jquery登录的异步验证操作示例
2019/05/09 jQuery
微信小程序实现翻牌抽奖动画
2020/09/21 Javascript
Django框架使用mysql视图操作示例
2019/05/15 Python
python之pymysql模块简单应用示例代码
2019/12/16 Python
python的列表List求均值和中位数实例
2020/03/03 Python
音频处理 windows10下python三方库librosa安装教程
2020/06/20 Python
python实现ping命令小程序
2020/12/28 Python
HUGO BOSS美国官方网上商店:世界知名奢侈品牌
2017/08/04 全球购物
2014年自我评价
2014/01/04 职场文书
农村改厕实施方案
2014/03/22 职场文书
分公司任命书
2014/06/06 职场文书
2015年小学语文教学工作总结
2015/05/25 职场文书
2016年社会主义核心价值观心得体会
2016/01/21 职场文书
Python3 多线程(连接池)操作MySQL插入数据
2021/06/09 Python
教你使用Jenkins集成Harbor自动发布镜像
2022/04/03 Servers
canvas 中如何实现物体的框选
2022/08/05 Javascript