86

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.

私の質問は、この構文でプロトタイプにセッター/ゲッターを定義するにはどうすればよいですか?

やったことある:

Subclass.prototype = {
    __proto__: Superclass.prototype,
    /* other methods here ... */

    get myProperty() {
        // code.
    }
}

しかし、明らかに以下は機能しません。

Subclass.prototype.get myProperty() { /* code */ }

私は GJS (GNOME Javascript) を使用しており、エンジンは Mozilla Spidermonkey のものと多かれ少なかれ同じであることを意図しています。私のコードはブラウザー向けではないので、GJS でサポートされている限り (Spidermonkey を意味すると思いますか?)、相互互換性がなくてもかまいません。

4

6 に答える 6

43

私はあなたがこのようにしたかったと思います:

function Unit() {
   	this._data; // just temp value
}
Unit.prototype = {
 	get accreation() {
   		return this._data;
   	},
   	set accreation(value) {
   		this._data = value
   	},
}
Unit.prototype.edit = function(data) {
   	this.accreation = data; // setting
   	this.out();
};

Unit.prototype.out = function() {
    alert(this.accreation); // getting
};

var unit = new Unit();
unit.edit('setting and getting');

function Field() {
    // children
}

Field.prototype = Object.create(Unit.prototype);

Field.prototype.add = function(data) {
  this.accreation = data; // setting
   	this.out();
}

var field1 = new Field();
field1.add('new value for getter&setter');

var field2 = new Field();
field2.out();// because field2 object has no setting

于 2016-02-21T22:51:54.430 に答える