Внедрение методов / переменных в область видимости Javascript - PullRequest
0 голосов
/ 05 ноября 2010

Я хочу использовать методы, которые мне не нужны () в начале файла.

Примерно так:

var contact = require('contact');

person = contact.create({
    'name': createName()
});

Здесь я хочу использовать функцию createName (), даже если она явно не требуется ().

Вот примеры в Ruby:

# By extending a class it gets the class methods from the parent:
class Section < ActiveRecord::Base
  belongs_to :document
  has_many :paragraphs
end

# By using a block and executing it in an object containing those methods used
namespace "admin" do
  resources :posts, :comments
end

Это не должно быть в точности как в примере, но каким-то образом внедрить методы / переменные в код без явного использования require (), так что это будет так же элегантно и просто, как Ruby.

Возможно ли это в Javascript?

Ответы [ 2 ]

2 голосов
/ 05 ноября 2010

РЕДАКТИРОВАТЬ : можно просто использовать createName (), и его не нужно экспортировать.Но вам необходимо экспортировать модуль, который его содержит.

Пример: (test2.js)

exports.normal = function() {
    console.log("Exporting is normal");
};

GLOBAL.superior = function() {
    console.log("Global is superior");
};

var privateInferior = function() {
    console.log("Private is inferior")
}

var i_am_a_variable = 5;

var i_m_an_array = [1, 2, 3, 4, 5];

(test1.js)

var test2 = require('./test2.js');
test2.normal(); // works!!

superior(); // works!!

privateInferior(); // does not work as it is not global.

console.log(i_am_a_variable); // does not work as it is not global.

console.log(i_m_an_array); // does not work as it is not global.

normal() // does not work as it is exported. Available only via test2.
1 голос
/ 05 ноября 2010

Если createName определено в contact, например,

exports.createName = func;

Затем вы можете «экспортировать» его (и все другие аналогично определенные функции / свойства), используя with

with (require('contact')) {
  var name = createName();
}

Что функционально совпадает с

var contact = require('contact');

var name = contact.createName();

with просто создает новую область видимости на основе переданного ей объекта. Поскольку require просто возвращает объект, его можно использовать вместе с with для эмуляции возможностей импорта пространств имен / функций некоторых других языков. Просто не забудьте завернуть все в фигурные скобки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...