假设我有一个我想在多个文件之间重用的功能。我可以把它变成全球性的,但这并不好。
master_file.js
add = function(num1, num2){
return num1 + num2;
};
subtract = function(num1, num2){
return num1 - num2
};
file1.js
add(4,4);
file2.js
add(9,1);
file3.js
subtract(8,2);
相反,我可以创建一个全局对象,并将函数作为全局对象(或其他人做的window
对象)的值附加。
master_file_v2.js
var add = function(num1, num2){
return num1 + num2;
};
var subtract = function(num1, num2){
return num1 - num2
};
global = {
add: function(num1, num2){
return add(num1, num2);
},
subtract: function(num1, num2){
return subtract(num1, num2);
}
};
然后我必须调用这样的函数。
file1.js
global.add(4,4);
file2.js
global.add(9,1);
file3.js
global.subtract(8,2);
有没有办法不调用这样的函数?我希望像以前一样直接用他们的名字来称呼它们,但不要将它们声明为全局。
file1.js
add(4,4);
file2.js
add(9,1);
file3.js
subtract(8,2);
答案 0 :(得分:2)
如果你想避免使用全局变量(你应该!),你应该看一下CommonJS或Harmony模块。
使用模块系统可以执行以下操作:
// utils.js
module.exports = function () {
return {
add: function (num1, num2) {
return add(num1, num2);
},
subtract: function (num1, num2) {
return subtract(num1, num2);
}
};
};
// file1.js
var add = require('./utils').add;
var subtract = require('./utils').subtract;
add(4,4);
subtract(8,2);
使用Harmony的解构功能或更好的事件:
var {add, subtract} = require('./utils');
add(4,4);
subtract(8,2);
使用模块可以使您的代码更加模块化,并使代码重用变得容易,同时保持全局范围的清洁。
答案 1 :(得分:0)
可以使用with,但已弃用。首选方法是将它们分配给局部变量,基本上与您在master_file
中所做的相反<强> file1.js 强>
var add = global.add
add(4,4);
<强> file2.js 强>
var add = global.add
add(9,1);
<强> file3.js 强>
var subtract = global.subtract
subtract(8,2);