Javascript 创建对象后,如何对变量使用get运算符?

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() {

我最近问了一个问题,我发现我可以使用{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() {
    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仍然占有相当大的市场份额。