9

私は誰も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をプロキシで呼び出す必要があります。何故ですか?

+0

私のシステムで同じことを実行すると、それぞれの関数を2回呼び出すと予想される結果が得られます。どのバージョンのノードとノードプロキシがありますか? – loganfsmyth

+0

@Logan F. Smyth:私は昨日出てきた0.6.5ノードで走っています。私はノードを '--harmony_proxies'フラグで走らせているので、サードパーティ製のライブラリは必要ありません。 V8の実装には現在のところバグが含まれていても、node-proxyはそうではないかもしれません。私はそれを確認します、ありがとう。 – pimvdb

答えて

0

フラグを使用するネイティブV8実装ではなく、Windows上でnode-proxyを使用する方法については、NowJS Webサイトのposted a blog entryを参照してください。

Nodeが現在使用しているV8バージョンには、プロキシに関していくつかのバグがあり、質問で概説されているような奇妙な動作を引き起こしているようです。しかし、node-proxyは、のバグのないプロキシ(NowJSの「魔法の名前空間」のコア)を有効にするモジュールです。 (このバグはV8の新しいバージョンでも修正されているが、カスタムビルドが必要になるだろう)

node-proxyをWindows上でビルドする方法を知りませんでした。これは.nodeアドオンです。純粋なJavaScript 1)。上のブログ記事では、彼らはコンパイルされたモジュールを配布しました。そして、すべてが今や魅力のように機能します。


プロキシフラグでノードを実行しないでくださいnode_modulesフォルダにフォルダを抽出し、now
  • に名前を変更:修正するには

    編集:ノード0。 7.0ではV8 3.8.6を使用してこの問題も解決しています。ちょうど--harmonyフラグで実行し、node-proxyへの参照を削除してください。

  • 関連する問題