编辑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) ,这个引擎应该与 MozillaSpiderMonkey 差不多。我的代码不是为浏览器设计的,只要 GJS 支持就行(我猜这意味着 SpiderMonkey?),我不介意,如果它不是交叉兼容。