2

私のモジュールで私がこのようなものを持っているとしましょう:

    Object.defineProperty(Array.prototype, 
               'sayHello', {get: function(){ return "hello I'm an array" });

ここで、この変更を、モジュールをインポートするすべてのスクリプトに表示できるようにします。これは可能ですか?

それに応じてEXPORTED_SYMBOLSを変更しようとしましたが、これまでのところ結果が得られませんでした。

同じことを達成する別の方法はありますか?(つまり、選択したオブジェクトに列挙できないプロパティを追加するモジュールをロードします-上記の例の配列のように)

編集:

value:とについてのAlnitakによる以下のコメントに続いてget:...

これで、次のようなプロパティを定義して使用できるようになりました。

Object.defineProperty(Array.prototype, 'firstId' , {value: function(){return this[0].id}});
var a = [{id:'x'},{id:'y'}]
a.firstId()

期待どおりに戻る

x

今:defineProperty呼び出しをモジュールに入れ、スクリプトからモジュールをロードし、このスクリプトの配列が上記の配列として機能することを期待することは可能ですか?

EDIT2:

私はxulrunnerでアプリケーションを作成しており、Components.utils.import()を使用してモジュールをロードしています-質問はもっと一般的に言えば(おそらく間違っている)...

4

1 に答える 1

0

プロパティ記述子内のget:型を使用して、実行時に計算される読み取り専用の値を指定できます。

Object.defineProperty(Array.prototype, 'sayHello', {
    get: function() {
        return "hello I'm an array";
    }
});

プロパティが読み取り専用の定数値である場合に使用value:します。

Object.defineProperty(Array.prototype, 'sayHello', {
    value: "hello I'm an array"
});

これらの両方の使用法は次のとおりです。

var hello = myArray.sayHello;

また、この型を使用して、プロトタイプの列挙不可能なプロパティとして関数value:を追加する必要があります。例:

Object.defineProperty(Array.prototype, 'sayHello', {
    value: function(o) {
        return "hello I'm an array";
    }
});

利用方法:

var hello = myArray.sayHello();

同じく、

于 2011-09-26T14:12:08.413 に答える