JavaScript中setter和getter方法介绍

作者:异步漫步

时间:2026-10-30

浏览:565

本文介绍JavaScript中非标准的setter和getter方法,探讨其在数据访问限制、DOM变量监听(如window.name跨域通信)中的应用。文章涵盖__defineGetter__与ES5语法两种实现方式,并列出Firefox、Safari、Opera等支持平台,帮助开发者利用这些特性增强对象属性控制能力。

文章目录

JavaScript Setter和Getter概述

JavaScript中的setter和getter并非标准方法,仅在非IE浏览器中得到支持(IE内核可能通过其他方式实现,具体机制尚不明确)。尽管存在兼容性限制,合理利用这些方法可以实现多种功能,例如:

1、对数据的访问限制:

通过调用a.value触发value变量的getter方法,若在getter实现中抛出异常,即可阻止对value变量的直接访问。

2、对DOM变量进行监听:

window.name是一个常用于跨域操作的DOM属性。通过覆盖window.name的setter实现,可以实现跨页面的内存异步通信。

3、发挥想象力,可实现更多功能。

Getters和Setters基础

以下内容为转载整理: 首先,快速了解Getters和Setters的概念及其价值,并查看当前支持这些特性的平台。

Getters和Setters

Getters和Setters允许快速获取或设置对象数据。通常,对象包含两个方法,分别用于获取和设置值,例如:


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

使用这种方式编写JavaScript的一个明显优势是:可以隐藏不希望外部直接访问的属性。最终代码结构如下(利用闭包保存新创建的Field对象的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,但绝不可能有两个getter)。 删除getter或setter的唯一方法是:delete object[name]。delete可以删除常见属性、getters和setters。 如果使用__defineGetter__或__defineSetter__,它会重写之前定义的相同名称的getter或setter,甚至覆盖普通属性(property)。

平台支持情况

平台

支持的浏览器包括:

Firefox Safari 3+ Opera 9.5

以上介绍了JavaScript中setter和getter方法的全部内容,希望对大家有所帮助。如需了解更多内容,敬请关注本站。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章