方法一:建立数组,动态的将对象内的内容push到数组内,然后通过对button设置`id = "字符串" + i;`的方式来保存一个伪下标,便于我们在取数组内容时使用;
通过对button设置onclick事件来动态打印对象内容,在函数内,我们通过对id的字符串的拆分来分解出数组需要的下标的index,最后直接通过`objArr[i].info();动态打印对应数据
function stuFuc(){
var arr = [1,2,3,4];
var objArr = [];
for (var i = 0; i < 30; i++) {
var objA = {
name:"张"+(i+1),
age:23,
infoData:arr,
info: function(){
console.log("objA的姓名:" + this.name + "年龄:" + this.age + "data:" + this.infoData);
}
};
objArr.push(objA);
var btn = document.createElement("button");
btn.innerHTML = objA.name;
btn.id = "btn_" + i;
btn.onclick = function(){
//使用获取数组下标的方式来进行对象内容的调用
var btnId = event.target.id;
var _index = btnId.slice(btnId.indexOf("_") + 1);
objArr[_index].info();
}
document.getElementsByTagName("body")[0].appendChild(btn);
}
}
方法二:直接将for循环的循环变量 i 使用 let 来声明,即可直接用 i 来作为数组下标动态打印数据
function stuFuc(){
var arr = [1,2,3,4];
var objArr = [];
for (let i = 0; i < 30; i++) {
var objA = {
name:"张"+(i+1),
age:23,
infoData:arr,
info: function(){
console.log("objA的姓名:" + this.name + "年龄:" + this.age + "data:" + this.infoData);
}
};
objArr.push(objA);
var btn = document.createElement("button");
btn.innerHTML = objA.name;
btn.id = "btn_" + i;
btn.onclick = function(){
//将for循环遍历的变量类型var修改为let来获取数组下标
objArr[i].info();
}
document.getElementsByTagName("body")[0].appendChild(btn);
}
}
总结:对于ES6新增的内容进行全面了解,区分let和var之间的作用域区别