2011-08-05 3 views
5

私はその後、私は戻って'undefined'を得るREPLノードで「静的メソッド」を使用してオブジェクト、関数、日付などを増やすことはできますか?

require("./augs"); 
typeof Object.foo 

を入力

Object.foo = "bar"; 

が含まれているNode.jsのモジュール "のAUG" を作成した場合。

我々はフロントエンドとバックエンドの間にいくつかのコードを共有しようとしているなどObjectに追加した便利なメソッドに依存している弊社のWebアプリ、FunctionDate、内のコードを大量に持っているが、それはノードのように思えますこれらのコンストラクタ関数をリセットします。そうでなければ、指定されたモジュールの変更が他のモジュールに漏れないようにします。これはかなりスマートで保護レベルは高く評価されますが、「私がやっていることは分かっていますが、私はObjectを増強させてください」と言う方法がありますか?このような

exports.augment = function(o) { 
    o.foo = "bar"; 
} 

増補Objectaugs.jsを想定し

答えて

4

には、以下が含まれ

> var aug = require("./augs.js"); 
> aug.augment(Object); 
> typeof Object.foo 
'string' 

注:その後

exports.getObject = function() { 
    return Object; 
} 

あなたはまた、次の関数をエクスポートすると仮定します。

> var aug = require("./augs.js") 
> aug.getObject() == Object 
false 
+0

ええ、これはうまくいくと思います。私は私たちの(かなり大きい) 'augs.js 'を輸出モジュールに変換しなければならないだろう。あるモジュールの 'Object'が別のモジュールの' Object'ではないことを指摘してくれてありがとう。 – Domenic

+0

@lwburkあなたは、異なるモジュールで異なるオブジェクトについて詳しく説明できますか? –

+0

@Peter - 単純に言えば、モジュール内のネイティブは、そのモジュールをロードしたスクリプト内のネイティブと同じネイティブではありません。また、「モジュール1.1の現在では、モジュールでネイティブクラスを実装するために環境がどのように選択するかについての仕様は「未定義」です。つまり、各環境実装がどのように動作するかを決めることです。 http://wiki.commonjs.org/wiki/Modules/Natives –

関連する問題