私は誰もnowjsのpocket
で機能を提供しようとしています。みんなのポケットを_.extend
人でつけてみたい、つまりeveryone.now
です。私が理解できない何らかの理由で、_.extend
がクライアント側で適切に機能を提供できません。nowjsで全員のポケットを拡張できないのはなぜですか?
これは私の現在のコードです:両方のサーバーとクライアント側には
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
をプロキシで呼び出す必要があります。何故ですか?
私のシステムで同じことを実行すると、それぞれの関数を2回呼び出すと予想される結果が得られます。どのバージョンのノードとノードプロキシがありますか? – loganfsmyth
@Logan F. Smyth:私は昨日出てきた0.6.5ノードで走っています。私はノードを '--harmony_proxies'フラグで走らせているので、サードパーティ製のライブラリは必要ありません。 V8の実装には現在のところバグが含まれていても、node-proxyはそうではないかもしれません。私はそれを確認します、ありがとう。 – pimvdb