Почему я не могу продлить карман каждого в Nowjs?
-
28-10-2019 - |
Вопрос
Я пытаюсь предоставить функции во всех 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
.
Подчеркивается 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 о том, как использовать node-proxy
В Windows вместо собственной реализации V8 с использованием --harmony_proxies
флаг.
Оказалось, что версия V8, которую Node в настоящее время использует в настоящее время, содержит несколько ошибок в отношении прокси, которые вызывали странное поведение, как указано в вопросе. node-proxy
, однако, является модулем, который позволяет прокси (ядро «Пространство магических имен» NowJS) без эти ошибки. (Ошибки исправлены и в более новой версии V8, но это потребует пользовательской сборки узла.)
Я просто не мог понять, как построить node-proxy
в Windows (это .node
добавить; не чистый JavaScript One). В приведенном выше сообщении они распространили скомпилированный модуль, и теперь все работает как очарование.
Исправить:
- Скачать Скомпилированный модуль
- Извлечь папку в
node_modules
папка и переименовать ее вnow
- Не запускайте узел с помощью прокси -флага
Редактировать: Узел 0.7.0 использует V8 3.8.6, который также решает эту проблему. Просто беги с --harmony
флаг и удалите ссылку на node-proxy
.