Я пытаюсь обеспечить функции в каждом кармане
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.
Почему extending не работает с everybody.now
и как я могу заставить его работать?
Edit 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
на прокси. Почему так?