Javascript 创建对象后,如何对变量使用get运算符?
我最近问了一个问题,我发现我可以使用{get a(){return'whatev'}}来控制get和set变量时发生的事情 我想知道在创建变量后,我是否/如何做到这一点,类似这样的事情,但这不起作用:Javascript 创建对象后,如何对变量使用get运算符?,javascript,variables,object,Javascript,Variables,Object,我最近问了一个问题,我发现我可以使用{get a(){return'whatev'}}来控制get和set变量时发生的事情 我想知道在创建变量后,我是否/如何做到这一点,类似这样的事情,但这不起作用: abc=new Object(); abc._a = NaN; abc.get a() { return abc._a; } abc.set a(i) { abc._a=i; } 在另一个问题中,它只向我展示了在制作新对象时如何操作: abc = { _a:NaN; get a() {
abc=new Object();
abc._a = NaN;
abc.get a() {
return abc._a;
}
abc.set a(i) {
abc._a=i;
}
在另一个问题中,它只向我展示了在制作新对象时如何操作:
abc = {
_a:NaN;
get a() {
return _a;
}
set a(i) {
_a=i;
}
}
编辑:
我在上找到了“defineGetter”和“defineGetter”,它可以工作,但它说它是非标准的。还有更标准的方法吗?只有ES5(ECMAScript版本5)支持getter和setter。不幸的是,ES5还没有被任何浏览器完全实现,只是部分实现
当前的Javascript实现不支持getter和setter,不是以标准或跨浏览器的方式。抱歉,您必须编写显式的getA和setA函数
以下是ES3(它适用于所有现代浏览器,甚至IE6)中使用闭包的推荐方式:
var abc = (function () {
var a = NaN;
return {
getA: function () {
return a;
},
setA: function (value) {
a = value;
}
};
})();
这将在变量abc
中为您提供一个对象,该对象具有两个函数:getA()
和setA(value)
。获得a
的唯一方法是通过这两种方法
abc.getA()
// NaN
abc.setA(25);
abc.getA();
// 25
a
变量本身对外隐藏,因为它只存在于用于创建对象的匿名函数的范围内。get和set
是对象初始值设定项的一部分。它们不是对象的属性,因此不能在以后添加
有关更多信息,请参阅。非标准和在大多数浏览器(Mozilla、WebKit和Opera,但不支持IE)中支持。它们将执行您想要的操作,并且是受支持的最佳选项(除了用显式的getX()
和setX()
方法替换您的属性)。例如:
var o = {};
o._a = "foo";
o.__defineGetter__("a", function() {
return this._a;
});
o.__defineSetter__("a", function(val) {
return this._a = val;
});
alert(o.a); // "foo"
o.a = "bar";
alert(o._a); // "bar
更新:
注意,现在正确的方法是使用Object.defineProperty或Object.defineProperties。
\uuuu defineGetter\uuuu
和\uuuu defineSetter\uuuu
得到了相当好的支持:在主要浏览器中,只有IE不支持它们。看看我的答案。就像我说的:不是以标准或跨浏览器的方式。。。不幸的是,IE仍然占有相当大的市场份额。