【发布时间】:2019-09-14 02:52:59
【问题描述】:
我创建了一个对象,其中包含多个对象的名称以及与创建新对象(在本例中为图表)相关的函数名称。
var oCharts = [{
nchart: "chart1",
fchart: "makeChart1"
},
{
nchart: "chart2",
fchart: "makeChart2"
},
{
nchart: "chart3",
fchart: "makeChart3"
}
]
“nchart”是表示要销毁的图表的变量。 “fchart”是代表创建新图表的函数的变量。
如果我像这样手动操作,它可以工作
if(typeof chart1 != undefined ){
chart1.destroy();
makeChart1();
}
如果我遍历 oCharts,它就不起作用。我得到“对象不支持属性或方法'destroy'”,当然,它永远无法运行makeChart()。 (我什至不确定我是否正确地调用它。)
$(oCharts).each(function(i,v){
var myChart = [this.nchart];
var makeChart = this.fchart;
if(typeof myChart != undefined ){
myChart.destroy();
makeChart();
}
});
制作图表的功能很简单……
function makeChart1(){
// do stuff
}
function makeChart2(){
// do other stuff
}
function makeChart3(){
// do different stuff
}
谁能告诉我我做错了什么?将不胜感激!
【问题讨论】:
-
函数是如何定义的?如果必须使用
eval动态评估以通过字符串而不是其引用来调用函数,这是一个坏主意。当您在string上使用()时遇到错误typeof myChart是string并且只有函数具有调用它的属性 -
你是如何破坏图表的???
-
图表是使用 chart.js 制作的。 chart1.destroy() 是你如何销毁它们以创建一个具有相同 ID 的新的。
-
您的表达式
typeof myChart != undefined始终为真,因为typeof variable始终返回string类型,您应该将其与undefined的字符串化值进行比较@ 即typeof myChart !== 'undefined'此外,在您创建此表达式之前一个变量`var myChart = [this.nchart]; `typeof myChart总是会返回“对象”。为防止您只需将this.nchart分配给myChart -
抱歉,谢尔盖。但是,如果 myChart 尚未创建,则 typeof myChart 将是未定义的,因此不能被销毁。我正在尝试将图表的 ID 传递到条件中,如果定义了具有该 ID 的对象,则将其销毁。
标签: javascript