2017-05-11 33 views
0

这是我的第一个Stack问题,所以请原谅我的格式。
我正在制作一个简单的矢量绘图工具。 full CodePen code here从函数返回canvas代码行,无评估

所以我与方法“的临时”与“模板”画布绘制命令内一个DRAW对象和要输入端之间的可变码线,这是由该对象的其它方法(ADD,SUB ...返回)。

temp(operation){ 

    ctx.beginPath(); 
    ctx.moveTo(o.x, o.y); 
    eval(operation); 
    ctx.strokeStyle="red"; 
    ctx.stroke(); 
} 

有人可以帮助我避免eval(),我读的是坏的和容易出错的。 还有其他建议会很好。 谢谢。

+0

您可以将'ctx'作为参数并执行操作 – Rajesh

回答

0

您可以将函数作为参数传递给temp。

doSomething(options) { 
    // some code to execute 
} 

temp(callback) { 
    const options = {}; 

    callback(options); 
} 

temp(doSomething) 
+0

感谢您的回应。在试过但没有给出结果。它发生了,我传递给'temp'一个带有参数的函数,如:'DRAW.temp(DRAW.add(v1,v2))'并且它不起作用,但是当我只传递'DRAW.add'并且'temp'我调用了'操作(v1,v2)',它工作得很完美。 –

0

好吧,所以事情是,我传递给DRAW.temp一个带参数的add函数,它没有工作。 现在我只传递DRAW.add和参数(v1,v2)被添加到temp方法中并且它的ok。

DRAW={ 
add(v1,v2){}, 
sub(v1,v2){}, /////operations 

temp(operation){ 

    console.log(operation) 
    ctx.beginPath(); 
    ctx.moveTo(o.x, o.y); 
    operation(v1,v2);/////////////input operation 
    ctx.strokeStyle="red"; 
    ctx.stroke(); 
} 
}; 
var draw =DRAW.temp; 
var add =DRAW.add; 

draw(add)