Javascript 在模块之间分配功能
我有一个模块,我想给一个公共变量分配一个函数,然后在该模块内使用该函数。请参见下面的示例,了解我认为我能够做的事情 main.jsJavascript 在模块之间分配功能,javascript,node.js,Javascript,Node.js,我有一个模块,我想给一个公共变量分配一个函数,然后在该模块内使用该函数。请参见下面的示例,了解我认为我能够做的事情 main.js ;(function() { const test = require("./test"); function newFunction() { console.log("New function"); } // This works fine test.someFunction = newFunction;
;(function() {
const test = require("./test");
function newFunction() {
console.log("New function");
}
// This works fine
test.someFunction = newFunction;
test.someFunction();
// But this doesn't
test.callSomeFunction();
}());
;(function() {
let someFunction = function() {
console.log("Old function");
}
function callSomeFunction() {
someFunction();
}
module.exports = {
someFunction,
callSomeFunction
}
}());
;(function() {
let someFunction = function() {
console.log("Old function");
}
function callSomeFunction() {
someFunction();
}
function setSomeFunction(newFunction) {
someFunction = newFunction;
}
module.exports = {
setSomeFunction,
callSomeFunction
}
}());
test.js
;(function() {
const test = require("./test");
function newFunction() {
console.log("New function");
}
// This works fine
test.someFunction = newFunction;
test.someFunction();
// But this doesn't
test.callSomeFunction();
}());
;(function() {
let someFunction = function() {
console.log("Old function");
}
function callSomeFunction() {
someFunction();
}
module.exports = {
someFunction,
callSomeFunction
}
}());
;(function() {
let someFunction = function() {
console.log("Old function");
}
function callSomeFunction() {
someFunction();
}
function setSomeFunction(newFunction) {
someFunction = newFunction;
}
module.exports = {
setSomeFunction,
callSomeFunction
}
}());
为了实现这一点,我目前有一个在模块中设置函数的方法,因此test.js
看起来像下面的代码片段
test.js
;(function() {
const test = require("./test");
function newFunction() {
console.log("New function");
}
// This works fine
test.someFunction = newFunction;
test.someFunction();
// But this doesn't
test.callSomeFunction();
}());
;(function() {
let someFunction = function() {
console.log("Old function");
}
function callSomeFunction() {
someFunction();
}
module.exports = {
someFunction,
callSomeFunction
}
}());
;(function() {
let someFunction = function() {
console.log("Old function");
}
function callSomeFunction() {
someFunction();
}
function setSomeFunction(newFunction) {
someFunction = newFunction;
}
module.exports = {
setSomeFunction,
callSomeFunction
}
}());
因为我觉得这不是一个非常优雅的解决方案,所以我想知道是否有其他方法,也许是某种方法可以让前两个代码片段以嵌入方式工作,或者我是否坚持使用setter方法
function callSomeFunction() {
someFunction();
}
callSomeFunction
的定义时间早于someFunction
(称为)
产生以下定义顺序:
1. callSomeFunction
2. someFunction
您应该将此函数更改为由
常量存储,或者像使用someFunction
一样将其设置为常量或let
,或者将它们都设置为函数
,除非我遗漏了一些内容,否则您的解决方案很遗憾无法工作。即使使用let
或function
定义这两个函数,调用旧函数时也会出现相同的行为。