2017-05-11 62 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)