我希望能够在文件开头使用我没有要求的方法()。
这样的事情:
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中使用吗?
答案 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
一起使用来模拟某些其他语言的命名空间/函数导入功能。只记得用花括号包装所有东西。