javascript - 为什么我不能在 nowjs 中扩展每个人的口袋?

标签 javascript node.js underscore.js nowjs-sockets ecmascript-harmony

我试图在每个人的 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

Underscore 的 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。这是为什么?

最佳答案

他们 posted a blog entry在 NowJS 网站上,了解如何在 Windows 上使用 node-proxy,而不是使用 --harmony_proxies 标志的 native V8 实现。

看来 Node 当前使用的 V8 版本包含几个与代理有关的错误,这些错误导致了问题中概述的奇怪行为。然而,node-proxy 是一个启用代理(NowJS 的“神奇 namespace ”的核心)的模块, 没有这些错误。 (这些错误也在较新版本的 V8 中得到修复,但这需要自定义构建 Node。)

我只是不知道如何在 Windows 上构建 node-proxy(它是一个 .node 插件;不是纯 JavaScript 插件)。在上面的博文中,他们分发了编译后的模块,现在一切正常。

修复:

  • 下载the compiled module
  • 解压文件夹到node_modules文件夹,重命名为now
  • 不要使用代理标志运行 Node

编辑: Node 0.7.0 使用 V8 3.8.6 也解决了这个问题。只需使用 --harmony 标志运行并删除对 node-proxy 的引用。

关于javascript - 为什么我不能在 nowjs 中扩展每个人的口袋?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8377820/

相关文章:

javascript - 迭代构造函数链

javascript - 有没有办法在c3js上覆盖c3_chart_internal_fn.generateResize?

javascript - 在 Windows 10 机器上已经启动了一些其他 Node.js 文件后如何启动一个新的 Node.js 文件?

javascript - 要求在虚拟机中无法按预期工作

javascript - 以某种方式(从右到左)合并,展平和连接javascript中的多个多维数组的任何简单方法?

javascript - MVC Ajax调用问题

node.js - FCM : getting ' Error: data must be a non-null object' error?

javascript - 如何使用下划线在 javascript 中检查 "undefined"?

javascript - 使用 _.template 将 JSON 字符串转换为下划线模板

javascript - 命名空间树 javascript 示例和语法解释