【发布时间】:2012-05-22 11:50:48
【问题描述】:
2016 年 10 月编辑:请注意,这个问题是在 2012 年提出的。每个月左右都会有人添加一个新的答案或评论来反驳答案,但这样做并没有真正意义这个问题可能已经过时了(请记住,是 Gnome Javascript 编写 gnome-shell 扩展,而不是浏览器的东西,这是非常具体的)。
按照my previous question 介绍如何在 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?),我不介意它是否不交叉兼容。
【问题讨论】:
-
Mozilla 文档提到了
__defineGetter__和__defineSetter(但我从未真正使用过这些......)。 developer.mozilla.org/en/Core_JavaScript_1.5_Guide/… -
太棒了,这看起来就像我所追求的。如果您将其发布为答案,我会接受。干杯! :)
-
完成了,并添加了来自 MDN 的示例。
-
请不要这样做。 JS中的继承是三行:调用超类,将原型设置为超类,将构造函数重置为子类。结束。编写这样的方法完全是浪费时间。
标签: javascript getter gjs