网络之美 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 new一个对象的实质
Jan 07 Javascript
扩展JavaScript功能的正确方法(译文)
Apr 12 Javascript
杨氏矩阵查找的JS代码
Mar 21 Javascript
jQuery实现鼠标选中文字后弹出提示窗口效果【附demo源码】
Sep 05 Javascript
jQuery.form.js插件不能解决连接超时(timeout)的原因分析及解决方法
Oct 14 Javascript
jquery Banner轮播选项卡
Dec 26 Javascript
JavaScript中transform实现数字翻页效果
Mar 08 Javascript
vue.js事件处理器是什么
Mar 20 Javascript
原生Aajax 和jQuery Ajax 写法个人总结
Mar 24 jQuery
vue获取当前激活路由的方法
Mar 17 Javascript
Vue+Java 通过websocket实现服务器与客户端双向通信操作
Sep 22 Javascript
JS中forEach()、map()、every()、some()和filter()的用法
May 11 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新手上路(十)
2006/10/09 PHP
默默小谈PHP&MYSQL分页原理及实现
2007/01/02 PHP
php 大数据量及海量数据处理算法总结
2011/05/07 PHP
PHP提取字符串中的图片地址[正则表达式]
2011/11/12 PHP
PHP+MySQL插入操作实例
2015/01/21 PHP
php根据指定位置和长度获得子字符串的方法
2015/03/17 PHP
使用Composer安装Yii框架的方法
2016/03/15 PHP
Yii视图CGridView实现操作按钮定义地址示例
2016/07/14 PHP
PHP测试框架PHPUnit组织测试操作示例
2018/05/28 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
遨游,飞飞,IE,空中网 浏览器无提示关闭方法
2011/07/11 Javascript
基于jQuery实现的水平和垂直居中的div窗口
2011/08/08 Javascript
Javascript中的delete操作符详细介绍
2014/06/06 Javascript
基于Jquery和html5实现炫酷的3D焦点图动画
2016/03/02 Javascript
JS闭包、作用域链、垃圾回收、内存泄露相关知识小结
2016/05/16 Javascript
javascript封装addLoadEvent实现页面同时加载执行多个函数的方法
2016/07/25 Javascript
微信小程序之小豆瓣图书实例
2016/11/30 Javascript
Vue.js第三天学习笔记(计算属性computed)
2016/12/01 Javascript
利用Vue.js实现求职在线之职位查询功能
2017/07/03 Javascript
详解JSON和JSONP劫持以及解决方法
2019/03/08 Javascript
JavaScript检测浏览器是否支持CSS变量代码实例
2020/04/03 Javascript
Python中函数eval和ast.literal_eval的区别详解
2017/08/10 Python
Python网络爬虫神器PyQuery的基本使用教程
2018/02/03 Python
python 的 scapy库,实现网卡收发包的例子
2019/07/23 Python
python图形界面开发之wxPython树控件使用方法详解
2020/02/24 Python
Python预测2020高考分数和录取情况
2020/07/08 Python
python 实现朴素贝叶斯算法的示例
2020/09/30 Python
Python基于staticmethod装饰器标示静态方法
2020/10/17 Python
SKECHERS斯凯奇中国官网:来自美国的运动休闲品牌
2018/11/14 全球购物
2014最新开业庆典策划方案(5篇)
2014/09/15 职场文书
机关中层领导干部群众路线教育实践活动个人对照检查材料
2014/09/24 职场文书
2015年医生个人工作总结
2015/04/25 职场文书
导游词之江苏同里古镇
2019/11/18 职场文书
python保存大型 .mat 数据文件报错超出 IO 限制的操作
2021/05/10 Python
Django drf请求模块源码解析
2021/06/08 Python
elasticSearch-api的具体操作步骤讲解
2021/06/28 Java/Android