首页 > 解决方案 > 如何删除评估(javascript)

问题描述

由于 eval 性能不佳,我想知道是否有任何方法可以删除此代码中的 eval 用于其他一些代码。目标是能够通过函数创建 SVG 元素。当前的方法是使用 eval 来创建元素。

function createrect(createrectvar1 , createrectvar2 , createrectvar3 , createrectvar4 , createrectvar5 , createrectvar6 , createrectvar7 , createrectvar8 , createrectvar9 , createrectvar10 , createrectvar11) {
/** id , x , y , rx , width , height , fill , stroke ,  stroke w , svgid , onclick **/
if (createrectvar11 == "_") {
eval(createrectvar1 + " = document.createElementNS('http://www.w3.org/2000/svg', 'rect') ; " + createrectvar1 + ".setAttribute('x' , " + createrectvar2 + ") ; " + createrectvar1 + ".setAttribute('y' , " + createrectvar3 + ") ; " + createrectvar1 + ".setAttribute('rx' , " + createrectvar4 + ") ; " + createrectvar1 + ".setAttribute('width' , " + createrectvar5 + ") ; " + createrectvar1 + ".setAttribute('height' , " + createrectvar6 + ") ; " + createrectvar1 + ".setAttribute('fill' , '" + createrectvar7 + "') ; " + createrectvar1 + ".setAttribute('stroke' , '" + createrectvar8 + "') ; " + createrectvar1 + ".setAttribute('stroke-width' , '" + createrectvar9 + "') ; " + createrectvar10 + ".appendChild(" + createrectvar1 + ") ; ") ;
} else {
eval(createrectvar1 + " = document.createElementNS('http://www.w3.org/2000/svg', 'rect') ; " + createrectvar1 + ".setAttribute('x' , " + createrectvar2 + ") ; " + createrectvar1 + ".setAttribute('y' , " + createrectvar3 + ") ; " + createrectvar1 + ".setAttribute('rx' , " + createrectvar4 + ") ; " + createrectvar1 + ".setAttribute('width' , " + createrectvar5 + ") ; " + createrectvar1 + ".setAttribute('height' , " + createrectvar6 + ") ; " + createrectvar1 + ".setAttribute('fill' , '" + createrectvar7 + "') ; " + createrectvar1 + ".setAttribute('stroke' , '" + createrectvar8 + "') ; " + createrectvar1 + ".setAttribute('stroke-width' , '" + createrectvar9 + "') ; " + createrectvar1 + ".setAttribute('onclick' , '" + createrectvar11 + "()') ; " + createrectvar10 + ".appendChild(" + createrectvar1 + ") ; ") ;
}
}

标签: javascript

解决方案


我看不出使用eval(). 在这里,我有一个函数createRect()将在 svg 元素中创建一个 rect 元素。

const createRect = (svgElm, id, height = 1, width = 1, fill = 'blue') => {
  let rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
  rect.setAttribute('xmlns', 'http://www.w3.org/2000/svg');
  rect.setAttribute('height', height);
  rect.setAttribute('width', width);
  rect.setAttribute('fill', fill);
  rect.setAttribute('x', 0);
  rect.setAttribute('y', 0);
  svgElm.appendChild(rect);
};

let svg01 = document.getElementById('svg01');
createRect(svg01, 12, 100, 50);
<svg xmlns="http://www.w3.org/2000/svg" id="svg01"></svg>


推荐阅读