Как да емулирам обект прозорец в 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 require. - 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

Можете да използвате обекта GLOBAL.

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

Ако трябваше да сравните Web Console с Node, работещ в терминал (и двата Javascript):

window ‹-> global (Забележка: GLOBAL е отхвърлен)

в уеб конзолата: window.wgSiteName (произволно за показване на функционалност)

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

document ‹-> process (Забележка: програмният процес се изпълнява в момента)

в уеб конзолата: document.title

във възел (терминал): process.title

person THEOS    schedule 09.03.2017