网络之美 JavaScript中Get和Set访问器的实现代码

 更新时间:2010年09月19日 22:53:27   作者:  
前两天IE9 Beta版发布了,对于从事Web开发的朋友们来说真是个好消息啊,希望将来有一天各个浏览器都能遵循统一的标准。今天要和大家分享的是JavaScript中的Get和Set访问器,和C#中的访问器非常相似。
标准的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"

在如下浏览器能正常工作:

我们常用的实现方法可能是这样的:

复制代码 代码如下:

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";

在如下浏览器能正常工作:

 

通过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"

在如下浏览器能正常工作:

普通对象的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"

在如下浏览器能正常工作:

本文总结

  尽管微软的IE只是支持了Object.defineProperty,没有完美的实现Get和Set访问器,但是我们已经看到了IE有了很大的进步,特别是刚发布的IE9使用的新的javascript引擎,支持HTML5和CSS3,支持硬件加速等等,相信有一天各个浏览器都能完全拥抱标准,带来一个完美的WEB世界。

参考文献:

1. Getters and setters with JavaScript
2. JavaScript Getters and Setters

作者:梦想

相关文章

  • JS代码简洁方式之函数方法详解

    JS代码简洁方式之函数方法详解

    这篇文章主要介绍了JS代码简洁方式之函数方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • javascript网页关闭时提醒效果脚本

    javascript网页关闭时提醒效果脚本

    当页面载入和关闭时会出现一些提示信息的代码。方便提醒用户,但不建议多用,让人感到反感。
    2008-10-10
  • js图片跟随鼠标移动代码

    js图片跟随鼠标移动代码

    大家浏览网页的时候,见到过图片跟随鼠标移动的js特效,效果非常好,是怎么实现的呢,实现这个功能很简单,感兴趣的朋友一起看看吧
    2015-11-11
  • JavaScript Event学习第七章 事件属性

    JavaScript Event学习第七章 事件属性

    为了理解Event属性,我将在这里给出一些示例代码。在这个范畴内有非常严重的浏览器兼容性问题。
    2010-02-02
  • antd/fusion表格增加圈选复制功能思路详解

    antd/fusion表格增加圈选复制功能思路详解

    我们存在着大量在PC页面通过表格看数据业务场景,表格又分为两种,一种是antd / fusion这种基于dom元素的表格,另一种是通过 canvas 绘制的类似 excel 的表格,这篇文章主要介绍了antd/fusion表格增加圈选复制功能,需要的朋友可以参考下
    2023-09-09
  • JavaScript插入排序算法原理与实现方法示例

    JavaScript插入排序算法原理与实现方法示例

    这篇文章主要介绍了JavaScript插入排序算法原理与实现方法,简单分析了插入排序的概念、原理并结合实例形式分析了JavaScript插入排序算法的具体实现技巧与注意事项,需要的朋友可以参考下
    2018-08-08
  • 微信小程序首页的分类功能和搜索功能的实现思路及代码详解

    微信小程序首页的分类功能和搜索功能的实现思路及代码详解

    这篇文章主要介绍了微信小程序首页的分类功能和搜索功能的实现思路及代码详解,微信宣布了微信小程序开发者工具新增“云开发”功能,现在无需服务器即可实现小程序的快速迭代,感兴趣的朋友跟随小编一起看看吧
    2018-09-09
  • bootstrap导航条实现代码

    bootstrap导航条实现代码

    这篇文章主要为大家详细介绍了bootstrap导航条的实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • JavaScript前端实现压缩图片功能

    JavaScript前端实现压缩图片功能

    这篇文章主要介绍了JavaScript前端实现压缩图片功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • JS函数的返回值如何使用

    JS函数的返回值如何使用

    函数是一块js代码块,被定义一次但可以执行和调用多次,js中的函数也是对象可以像其他对象那样操作和执行,js函数也被称为函数对象,本文给大家介绍JS函数的返回值如何使用,感兴趣的朋友跟随小编一起看看吧
    2024-02-02

最新评论