Как эмулировать оконный объект в Nodejs?

При запуске в браузере все, что связано с объектом «окно», автоматически становится глобальным объектом. Как я могу создать объект, похожий на тот, что есть в Nodejs?

mySpecialObject.foo = 9;
var f = function() { console.log(foo); };
f();  // This should print "9" to console

person Ngoc Dao    schedule 22.01.2013    source источник


Ответы (5)


Для этой цели вы можете использовать предопределенный объект global. Если вы определите foo как свойство объекта global, оно будет доступно во всех модулях, используемых после этого.

Например, в app.js:

var http = require('http');
var foo = require('./foo');

http.createServer(function (req, res) {
  //Define the variable in global scope.
  global.foobar = 9;
  foo.bar();    
}).listen(1337, '127.0.0.1');

И в foo.js:

exports.bar = function() {
  console.log(foobar);
}

Убедитесь, что вы не используете ключевое слово var, поскольку объект global уже определен.

Для документации см. http://nodejs.org/api/globals.html#globals_global.

person Akhil Raina    schedule 22.01.2013
comment
Но будьте осторожны, в отличие от javascript браузера, глобальные объекты не являются действительно глобальными в смысле этого слова. Они по-прежнему локальны для модуля, то есть файла javascript. Другими словами, все, что прикреплено к глобальному объекту файла, не будет доступно в другом файле, вам придется прикрепить его к специальному объекту module.exports. Для получения дополнительной информации узнайте, как работает nodejs. - person Juzer Ali; 22.01.2013
comment
Спасибо за ответ и уведомление. Я пришел к простому решению: var mySpecialObject = global. В браузере (в глобальном масштабе): mySpecialObject = this. - person Ngoc Dao; 25.01.2013

вы можете прикрепить глобальный материал к process вместо window

person Michael Yin    schedule 22.01.2013
comment
То есть я хочу создать особый объект, похожий на окно. Присоединение к нему foo сделает foo глобальным. - person Ngoc Dao; 22.01.2013

Вы можете использовать ГЛОБАЛЬНЫЙ объект.

fruit = 'banana';
console.log(GLOBAL.fruit); // prints 'banana'

var car = 'volks';
console.log(GLOBAL.car); // prints undefined
person caike    schedule 07.12.2013

Я пришел к такому простому решению:

var mySpecialObject = global;

В обычном браузере:

var mySpecialObject = this;  // Run this at global scope
person Ngoc Dao    schedule 08.12.2013

Если бы вы сравнили веб-консоль с узлом, работающим в терминале (оба Javascript):

window ‹-> global (Примечание: GLOBAL устарела)

в веб-консоли: window.wgSiteName (случайный, чтобы показать функциональность)

в узле (терминал): global.url

document ‹-> process (Примечание: программный процесс запущен прямо сейчас)

в веб-консоли: document.title

в узле (Терминал): process.title

person THEOS    schedule 09.03.2017