为什么我现在不能把每个人的口袋都掏出来呢?
Why can't I extend everyone's pocket in nowjs?
我试图在nowjs的每个人的pocket
提供功能。我想做到这一点通过_.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网站上发表了一篇关于如何在Windows上使用node-proxy
,而不是使用--harmony_proxies
标志的原生V8实现的博客文章。
Node目前使用的V8版本似乎包含了几个关于代理的错误,这些错误导致了问题中概述的奇怪行为。然而,node-proxy
是一个使代理(NowJS的"神奇命名空间"的核心)没有这些bug的模块。(这些错误在V8的新版本中也得到了修复,但这需要自定义构建Node。)
我只是不知道如何在Windows上构建node-proxy
(这是一个.node
插件;不是纯JavaScript的)。在上面的博客文章中,他们发布了编译后的模块,现在一切都运行得很好。
- 下载编译模块
- 将文件夹解压到
node_modules
文件夹,并将其重命名为now
- 不要运行带有代理标志的Node
编辑: Node 0.7.0使用V8 3.8.6也解决了这个问题。只需运行--harmony
标志并删除对node-proxy
的引用。
- 不能从angular2中的子组件指定父组件中的数组
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- 转义符不能与innerHTML一起使用
- JSON.parse没有'不能使用Javascript
- JS可以在Chrome中工作,但不能在Firefox中工作
- 砌体不能填补小缺口
- javascript扫雷器floodfill算法不能正常工作
- JavaScript指令不能像我想象的那样工作
- 为什么在这个网站上不能通过JS访问元素
- Facebook登录按钮没有'不能在Firefox上工作
- WebRTC视频聊天可以在FF中使用,但不能在Chrome中使用
- 为什么jQuery 1.8不能在IE8和InternetExplorer9中使用?(截至2012年9月的IE9最新版本)
- AngularJS:$q.dedefe()不能由工厂方法共享
- 不能在同一页上进行多个jquery幻灯片切换
- 不能在图像中的地图标记中使用花式框jquery插件的区域标记
- jQuery Datepicker可以在Safari中工作,但不能在FF或Chrome中工作
- javascript没有´我不能在joomla 3.0中工作
- 在ES6中,模块将导致多个网络调用,因为两个模块不能在单个文件中定义
- 为什么我现在不能把每个人的口袋都掏出来呢?