EDIT 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?),我就不在乎它是否不兼容。
__defineGetter__
和__defineSetter
(但我从来没有实际使用的...)。developer.mozilla.org/en/Core_JavaScript_1.5_Guide/...