我想在init()
函数中调用几个函数,其中存储了所有共享变量。但是,变量不会传递给每个单独的函数。有谁能告诉我这是否是最干净的方法,或者有更好的设计呢?谢谢!
function scatterPlot(data) { /* code to do scatter plot */ }
function bestFitLine(data) { /* code to draw a regression line */ }
function drawAxes(data) { /* code to draw the axes */ }
function drawLegend(data) { /* code to draw legend */ }
function init() {
data = { /* data object in JSON format */ }
margin = { /* margin settings to be passed into each function */ }
varNames = { /* some name information to be pass into each function */ }
/* More common information to be passed */
scatterPlot(data, margin, varNames, ...);
bestFitLine(data, margin, varNames, ...);
drawAxes(data, margin, varNames, ...);
drawLegend(data, margin, varNames, ...);
}
答案 0 :(得分:1)
另一种方法是将data,margin和varNames作为对象属性,这四个函数是方法。你必须改变一些东西让init返回一个对象,但它可能更干净。像
这样的东西function Init() {
this.data = { /* data object in JSON format */ }
this.margin = { /* margin settings to be passed into each function */ }
this.varNames = { /* some name information to be pass into each function */ }
/* More common information to be passed */
this.scatterPlot();
this.bestFitLine();
this.drawAxes();
this.drawLegend();
}
然后
Init.prototype.scatterPlot = function(data) { /* code to do scatter plot */ }
// and same with the other three
当然这会使Init成为构造函数,并且必须这样调用:
var obj = new Init();
如果您不想或不能这样做,那么您拥有的应该没问题。
答案 1 :(得分:1)
您可以制作一个包含数据,边距和varNames的对象。
var ctx = {data:{},margin:{},varNames:{}};
这使得方法的签名更简单。