我正在尝试在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
在代理上被调用。这是为什么?