Nowjsでみんなのポケットを伸ばすことができないのはなぜですか?
-
28-10-2019 - |
質問
私はみんなの機能を提供しようとしています 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
.