0

我一直在查看 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() { ... }意思?我认为一切都必须是name: valuejavascript 对象中的形式吗?(如果我制作这些对象之一,我可以做obj.state它返回我假设的内容this._switch.state)。

请注意 GNOME 说他们使用类似于 Mozilla 的 Spidermonkey 的一种 javascript (gjs) 风格可能会有所帮助,那么这种行为是非标准的 javascript 行为和 spidermonkey/gjs 的特性吗?

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

4

1 回答 1

1

查看https://developer.mozilla.org/en/JavaScript/Reference/Operators/get和 John Resig 在http://ejohn.org/blog/javascript-getters-and-setters/上的帖子

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

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

foo.blah == "bar"

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

于 2012-05-01T05:47:44.823 回答