编辑 2016 年 10 月:请注意这个问题是在 2012 年提出的。每个月左右,有人会添加一个新的答案或评论来反驳答案,但这样做没有意义,因为这个问题可能已经过时了(请记住,是Gnome Javascript编写 gnome-shell 扩展,而不是浏览器的东西,这是非常具体的)。
按照我之前关于如何在 Javascript 中进行子类化的问题,我正在创建一个超类的子类,如下所示:
function inherits(Child,Parent) {
var Tmp = function {};
Tmp.prototype = Parent.prototype;
Child.prototype = new Tmp();
Child.prototype.constructor = Child;
}
/* Define subclass */
function Subclass() {
Superclass.apply(this,arguments);
/* other initialisation */
}
/* Set up inheritance */
inherits(Subclass,Superclass);
/* Add other methods */
Subclass.prototype.method1 = function ... // and so on.
我的问题是,如何使用此语法在原型上定义 setter/getter?
我曾经做过:
Subclass.prototype = {
__proto__: Superclass.prototype,
/* other methods here ... */
get myProperty() {
// code.
}
}
但显然以下方法是行不通的:
Subclass.prototype.get myProperty() { /* code */ }
我正在使用 GJS(GNOME Javascript),并且该引擎或多或少与 Mozilla Spidermonkey 相同。我的代码不适用于浏览器,只要 GJS 支持它(我猜这意味着 Spidermonkey?),我不介意它是否不交叉兼容。