Javascript对象中`get functionname(){...}`的含义

时间:2012-05-01 05:41:02

标签: javascript spidermonkey

我一直在查看GNOME shell javascript界面​​,并从类的原型中注意到以下片段(感兴趣的人为popupMenu.js):

PopupSwitchMenuItem.prototype = {
    __proto__: PopupBaseMenuItem.prototype,

    _init: function(text, active, params) {
        ... (code)
    },

    ... function definitions

    get state() {
        return this._switch.state;
    },

    ... more functions
};

有人可以向我解释get state() { ... }的含义吗?我认为一切都必须是javascript对象中name: value的形式? (如果我创建其中一个对象,我可以obj.state返回我认为是this._switch.state的内容。

值得注意的是GNOME说他们使用类似于Mozilla的Spidermonkey的javascript(gjs),所以这种行为是非标准的javascript行为还是spidermonkey / gjs的一个特性?

此外,是否有与此相关的文档?

1 个答案:

答案 0 :(得分:1)

https://developer.mozilla.org/en/JavaScript/Reference/Operators/get

查看http://ejohn.org/blog/javascript-getters-and-setters/和John Resig的帖子

有趣的是,您可以像访问任何其他属性一样访问属性,除非它们是动态创建的......例如

foo = {
  get blah() {
    return "bar";
  }
}

foo.blah == "bar"

如果没有原生吸气剂,则必须执行foo.blah()。坦率地说,我从来没有使用它们只是因为IE8不支持它,而且优势很小。最常见的是,我可以看到它们在我开始使用像foo.blah这样的“愚蠢”属性的情况下很有用,并且在开发周期的后期某个时候意识到我想要foo.blah(),并且必须进行转换在每一点上,虽然使用getter和setter这样的转换是不必要的,因为你只需更改对象定义。