将方法/变量注入Javascript范围

时间:2010-11-05 20:15:56

标签: javascript ruby node.js

我希望能够在文件开头使用我没有要求的方法()。

这样的事情:

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 个答案:

答案 0 :(得分:2)

编辑:可以只使用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 :(得分:1)

如果在createName中定义了contact

exports.createName = func;

然后你可以使用with

“导出”它(以及所有其他类似定义的函数/属性)
with (require('contact')) {
  var name = createName();
}

在功能上与

相同
var contact = require('contact');

var name = contact.createName();

with只是根据传递给它的对象创建一个新的范围。由于require只返回一个对象,因此它可以与with一起使用来模拟某些其他语言的命名空间/函数导入功能。只记得用花括号包装所有东西。