JavaScript中setter和getter方法介绍


Posted in Javascript onJuly 11, 2016

javascript中的setter、getter是平时接触比较少的方法,其本身也并不是标准方法,只在非ie浏览器里支持(ie内核也许有其他方法可以做到呢?暂时不知其解),但是加以利用可以做许多事情,比如:

1、对数据的访问限制:

a.value是对value变量的getter方法调用,如果在getter方法实现中抛出异常,可以阻止对value变量的访问

2、对dom变量进行监听:

window.name是一个跨域非常好用的dom属性(大名鼎鼎,详见百度),如果覆盖window.name的setter实现则可以实现跨页面的内存异步通信

3、自己发挥想象力,能做的事情好多滴

以下皆转:
首先,我们先来快速了解什么是Getters和Setters,以及它们为什么很有用。然后,我们来看看现在都有哪些平台支持Gettets和Setters。

Getters和Setters

Getters和Setters使你可以快速获取或设置一个对象的数据。一般来说,一个对象拥有两个方法,分别用于获取和设置某个值,比如:

{
getValue: function(){
return this._value;
},
setValue: function(val){
this._value = val;
}
}

用这种方式写JavaScript的一个明显的好处是:你可以用它来隐藏那些不想让外界直接访问的属性。最终的代码看起来就像下面这样(用闭包保存新创建的Filed对象的value):

function Field(val){
var value = val;
this.getValue = function(){
return value;
};
this.setValue = function(val){
value = val;
};
}

于是我们可以这样使用:

var field = new Field("test");
field.value
// => undefined
field.setValue("test2")
field.getValue()
// => "test2"

我们来模拟上例中的 “隐藏的value属性”,我们的代码就像这样:

function Field(val){
var value = val;
this.__defineGetter__("value", function(){
return value;
});
this.__defineSetter__("value", function(val){
value = val;
});
}

但是呢,你不喜欢这样写,而倾向在对象的prototype中定义getters和setters(私有变量写在哪并不重要),我们可以用另一种语法。

function Field(val){
this.value = val;
}
Field.prototype = {
get value(){
return this._value;
},
set value(val){
this._value = val;
}
};

这种语法看起来很不可思议,但是使用过一段时间之后,接受它也很容易。

接下来是另一个例子,它允许外界获取一个username数组,但是却不能获取原始的,隐藏的user对象。

function Site(users){
this.__defineGetter__("users", function(){
// JS 1.6 Array map()
return users.map(function(user){
return user.name;
});
};
}

记住以下几点:

一个对象内,每个变量只能有一个getter或setter。(因此value可以有一个getter和一个setter,但是value绝没有两个getters)
删除getter或setter的唯一方法是:delete object[name]。delete可以删除一些常见的属性,getters和setters。
如果使用__defineGetter__或__defineSetter__,它会重写之前定义的相同名称的getter或setter,甚至是属性(property)。

平台

支持的浏览器有:

Firefox
Safari 3+
Opera 9.5

以上所述是小编给大家介绍的JavaScript中setter和getter方法介绍的全部叙述,希望对大家有所帮助,如果大家想了解更多内容,敬请关注三水点靠木。

Javascript 相关文章推荐
理解Javascript_07_理解instanceof实现原理
Oct 15 Javascript
30分钟就入门的正则表达式基础教程
Feb 25 Javascript
html中使用javascript调用本地程序(exe、doc等)实现代码
Apr 26 Javascript
Enter转换为Tab的小例子(兼容IE,Firefox)
Nov 14 Javascript
Javascript写入txt和读取txt文件示例
Feb 12 Javascript
JQuery中extend使用介绍
Mar 13 Javascript
jQuery中scrollTop()方法用法实例
Jan 16 Javascript
Javascript控制div属性动态变化实例分析
Oct 08 Javascript
javascript中使用未定义变量或值的情况分析
Jul 19 Javascript
react-native 圆弧拖动进度条实现的示例代码
Apr 12 Javascript
浅谈node中的cluster集群
Jun 02 Javascript
解决VUE项目使用Element-ui 下拉组件的验证失效问题
Nov 07 Javascript
jQuery 3.0 的 setter和getter 模式详解
Jul 11 #Javascript
仿百度换肤功能的简单实例代码
Jul 11 #Javascript
全面了解JavaScirpt 的垃圾(garbage collection)回收机制
Jul 11 #Javascript
全面理解闭包机制
Jul 11 #Javascript
js 判断一组日期是否是连续的简单实例
Jul 11 #Javascript
利用css+原生js制作简单的钟表
Apr 07 #Javascript
js仿百度切换皮肤功能(html+css)
Jul 10 #Javascript
You might like
php getsiteurl()函数
2009/09/05 PHP
PHP使用strrev翻转中文乱码问题的解决方法
2017/01/13 PHP
jQuery(1.6.3) 中css方法对浮动的实现缺陷分析
2011/09/09 Javascript
ExpressJS入门实例
2015/01/14 Javascript
浅谈类似于(function(){}).call()的js语句
2015/03/30 Javascript
jQuery模仿京东/天猫商品左侧分类导航菜单效果
2016/06/29 Javascript
Node.JS中事件轮询(Event Loop)的解析
2017/02/25 Javascript
Angular实现类似博客评论的递归显示及获取回复评论的数据
2017/11/06 Javascript
jQuery实现输入框的放大和缩小功能示例
2018/07/21 jQuery
token 机制和实现方式
2020/12/15 Javascript
Python正则表达式匹配中文用法示例
2017/01/17 Python
python实现决策树、随机森林的简单原理
2018/03/26 Python
对numpy数据写入文件的方法讲解
2018/07/09 Python
使用python制作游戏下载进度条的代码(程序说明见注释)
2019/10/24 Python
Python @property原理解析和用法实例
2020/02/11 Python
基于Keras中Conv1D和Conv2D的区别说明
2020/06/19 Python
Python如何进行时间处理
2020/08/06 Python
详解如何修改jupyter notebook的默认目录和默认浏览器
2021/01/24 Python
HTML5 对各个标签的定义与规定:body的介绍
2012/06/21 HTML / CSS
Gina Bacconi官网:吉娜贝康尼连衣裙和礼服
2018/04/24 全球购物
德国香水、化妆品和护理产品网上商店:Parfumdreams
2018/09/26 全球购物
外贸业务员岗位职责
2013/11/24 职场文书
精彩广告词大全
2014/03/19 职场文书
优秀研究生主要事迹
2014/06/03 职场文书
机电一体化应届生求职信
2014/08/09 职场文书
敬老月活动总结
2014/08/28 职场文书
财务检查整改报告
2014/11/06 职场文书
实习护士自荐信
2015/03/25 职场文书
2015年数学教研组工作总结
2015/05/23 职场文书
电影建党伟业观后感
2015/06/01 职场文书
2016关于读书活动的心得体会
2016/01/14 职场文书
优秀党员先进事迹材料2016
2016/02/29 职场文书
2019安全宣传标语大全
2019/08/14 职场文书
导游词之张家界
2019/10/31 职场文书
Python django中如何使用restful框架
2021/06/23 Python
Java移除无效括号的方法实现
2021/08/07 Java/Android