質問

私はみんなの機能を提供しようとしています pocket Nowjsの。私はそうしたいです _.extendみんなのポケットを入れる、すなわち everyone.now. 。何らかの理由で私が理解できない、 _.extend クライアント側で機能を適切に提供できません。

これは私の現在のコードです:

var _ = require("underscore"),
    everyone = require("nowjs").initialize(app);

everyone.now.foo = function() {};

_.extend(everyone.now, {
    bar: function() {}
});

console.log(everyone.now.foo); // [Function]
console.log(everyone.now.bar); // undefined

サーバーとクライアントの両方の側で、私はできます now.foo() 大丈夫です。一方で、 now.bar() 失敗します now.bar 定義されていません。これは、クライアント側とサーバー側の両方の場合です。上記の最後の行に示されているように、サーバー側での存在を確認しようとしました。ただし、この行はログに記録します undefined.

アンダースコア extend 関数(明らかに)は他のオブジェクトで動作しますので、Nowjsが使用する「魔法の名前空間」と関係があると思います。

どうして拡張が機能しないのか everyone.now どうすれば動作させることができますか?


編集2: 私はもう少しをプロキシに掘り下げました。その名前が機能しないため、変数を渡すことにより、プロキシにプロパティを設定するようです。このテストケースがより絞り込まれているため、最初の編集を削除しました。

なぜこれが機能しないのですか?これはバグですか? (ほとんどの場合、私はこれを自分で尋ねますが、そうではないことは知っていますが、これは本当に私を無知にしています...)

var proxy = Proxy.create({
    get: function(pr, name) {
        console.log("get called");
        return null;
    },

    set: function(pr, name, value) {
        console.log("set called");
    }
});

var key = "foo";

proxy["foo"] = "bar";
proxy[ key ] = "bar";

proxy["foo"];
proxy[ key ];

ログ結果:

set called
get called
get called

どうやら、 proxy[ key ] = "bar"; 引き起こされません set プロキシで呼び出されます。何故ですか?

役に立ちましたか?

解決

彼ら ブログエントリを投稿しました 使用方法に関するNowjs Webサイトで node-proxy Windowsで、ネイティブV8の実装の代わりに --harmony_proxies 国旗。

Nodeが現在使用しているV8バージョンには、質問で概説されているように奇妙な動作を引き起こしているプロキシに関するいくつかのバグが含まれているように見えました。 node-proxy, ただし、プロキシを可能にするモジュール(Nowjsの「魔法の名前空間」の中核)は それなし それらのバグ。 (バグはV8の新しいバージョンでも修正されますが、ノードのカスタムビルドが必要になります。)

私はただ構築する方法を理解できませんでした node-proxy Windows(それはaです .node アドオン;純粋なJavaScriptではありません)。上記のブログ投稿では、コンパイルされたモジュールを配布しましたが、すべてが魅力のように機能しています。

修正する:

  • ダウンロード コンパイルされたモジュール
  • フォルダーをに抽出します node_modules フォルダーとそれを変更します now
  • プロキシフラグでノードを実行しないでください

編集: Node 0.7.0はV8 3.8.6を使用して、この問題も解決します。で実行するだけです --harmony フラグを立てて参照を削除します node-proxy.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top