Javascript:从对象数组调用函数
Javascript: Calling a function from an array of objects
我有一个对象数组,我正在用这些对象构建一个页面对象有一个图像,图像将是可点击的,我想计算每个图像的点击次数。我正在尝试将每个对象的点击值分配给"点击",然后将"点击"交给 onclick 函数以分别计算点击次数。我不确定这是否有效。
我目前的问题是,当执行 onclick 函数时,该值显示为 NaN。我知道我需要为点击分配一个起始值。我在很多地方都试过了。在对象中,在函数之外的函数中。要么值没有计数,要么我收到错误,因为元素设置为 0在哪里可以分配起始值?
这是数组
var things =
[
{img : "cat.jpg",
tclicks: "cleo_clicks",
id : "cleo"
},
{img : "shimi.png",
tclicks: "shimi_clicks",
id : "shimi"
}
]
这就是我构建页面的方式 for ( var i= 0; i
var x = document.createElement("IMG");
x.setAttribute("src", things[i].img);
x.setAttribute(tclicks, things[i].clicks);
x.setAttribute("onclick", "countClicks(tclicks)");
document.body.appendChild(x);
}
这是我的点击功能
function countClicks(clicks){
clicks ++;
console.log(clicks)
}
没有
理由不能分配 clicks=0,其中定义的对象数组如下:
var things = [
{
img: "cat.jpg",
tclicks: "cleo_clicks",
id: "cleo",
clicks: 0
},
{
img: "shimi.png",
tclicks: "shimi_clicks",
id: "shimi",
clicks: 0
}
];
。但这只是问题的一半。
在点击递增函数中:
function countClicks(clicks) {
clicks++;
console.log(clicks);
}
。你永远不会影响对任何对象的 click 属性的更改,因为 Javascript 按值 (https://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_value) 传递函数参数。
您需要将整个对象传递给函数,并允许它修改属性值:
function countClicks(someObject) {
someObject.clicks++;
console.log(someObject.clicks);
}
。这意味着您需要更改函数的调用方式,例如:
x.setAttribute("onclick", "countClicks(things[i])");
注意:上面假设事物数组是全局的,否则您需要进一步重构。
最后注意,调用 JS 按值传递稍微简化了一点。你可以在这里更深入地探讨这个问题:JavaScript 是一种按引用传递还是按值传递语言?
是的。使用一个对象,不要把它写成onClick。太危险了。您可以覆盖它。请改用事件侦听器。
function CountClicks(config){
var img = config.img;
var tclicks = config.tclicks;
var id = config.id;
var clicks = 0;
return{
countUp: function(){
clicks++;
},
countDown: function(){
clicks--;
},
getCount: function(){
return clicks;
}
}
}
x.counter = new CountClicks(things[i]);
x.addEventListener('click', function(){this.counter.countUp()});
相关文章:
- 如何从模块链中调用函数.导出到节点中
- 调用函数内部的函数
- 在javascript中调用c函数
- DropDownListFor赢得't在更改时调用函数
- Javascript页面调用函数
- 在动画结束之前调用函数
- 允许父窗口在其不同域的子iframe上调用函数
- 运行Infinite Scroll后调用函数时出现问题
- JavaScript:在调用函数的文本输入上按enter键
- 使用大括号和不使用bracs调用函数的区别
- javascript在事件上调用函数
- 从index.html调用函数,该函数无限循环
- 从带参数的字符串变量调用函数中的函数
- 为什么 JS 不在滚动时调用函数
- 是否可以在不更改上下文的情况下调用函数.apply
- 如何在ES6类中使用参数调用函数
- AngularJS:调用函数时编号不更新
- JavaScript中的立即调用函数表达式(IIFE)-传递jQuery
- 在JavaScript中调用函数时自定义此选项
- 调用函数中声明的变量