如何在使用javascript创建对象的同时执行函数
How can i execute a function while creating an object using javascript?
如何在使用javascript 创建对象的同时执行函数
运行以下代码
var y = [] ;
var x = [[1,2,3] , [4,5,6] , [7,8,9]]
for (var i = 0 ; i < 3 ; i++){
y.push({name :'MyName' , value:function(){return x[i]} }) ;
}
console.log(y) ;
将生成以下对象
{name : 'MyName' , value : function (){return x[i]}
问题
我该如何执行这个对象函数:
{name : 'MyName' , value : function (){return [1,2,3]}
我试过eval()
,但不起作用
这是我的jsFiddle
对于那些问WHY
的人来说,你在这样做吗?我这样做是因为对象将按值复制,所以我最终会使所有的object.Value
等于X[2];
这是一个奇怪的代码位。我不确定你想达到什么目的。但是您遇到的问题是i
在整个循环中都在递增。因此,当最终调用函数时,i
的值为3,因此超出了x
数组的界限。你可以这样修复:
var y = [] ;
var x = [[1,2,3] , [4,5,6] , [7,8,9]]
for (var i = 0 ; i < 3 ; i++){
y.push({
name :'MyName',
index: i,
value:function(){return x[this.index]; }
}) ;
}
console.log(y[0].value());
或者,如果您不明确需要执行函数:
var y = [] ;
var x = [[1,2,3] , [4,5,6] , [7,8,9]]
for (var i = 0 ; i < 3 ; i++){
y.push({
name :'MyName',
value: x[i]
}) ;
}
console.log(y[0].value);
要成功地将这些对象添加到数组中,您需要在y.push()语句上创建一个闭包。闭包将确保变量x[i]在被调用时可用于value()函数。
下面的代码定义了"addItem()"函数,它关闭了创建自包含环境的对象的"value()"功能。这意味着即使在"addItem()"函数完成之后,"value()"功能仍然可以访问在"addItem[(])"函数中定义或传递的变量。
var i = 0
var y = [] ;
var x = [[1,2,3] , [4,5,6] , [7,8,9]];
function addItem(item) {
y.push({
name: 'MyName',
value: function () {
return item;
}
});
}
for ( ; i < 3 ; i++) {
addItem(x[i]);
}
console.log(y);
/*
[ { name: 'MyName', value: [Function] },
{ name: 'MyName', value: [Function] },
{ name: 'MyName', value: [Function] } ]
*/
console.log(y[0].value()); // [1, 2, 3]
console.log(y[1].value()); // [4, 5, 6]
console.log(y[2].value()); // [7, 8, 9]
你也可以在循环中使用匿名函数来实现同样的事情,但我选择不这样做,因为每次你绕过for循环时都会创建一个新函数。
相关文章:
- 如何做到这一点,使代码在不传递条件后执行函数
- javascript自执行函数-不同的语法
- JavaScript:只有当数组中的所有项都为true时才执行函数
- iFrame url更改时执行函数
- 为什么AngularJS在每个摘要循环上都执行函数
- 如何使用setInterval执行函数
- 当*ngFor以角度2结束时执行函数
- Ajax调用完成后如何执行函数
- 在显示引导弹出窗口之前执行函数
- 从自执行函数返回函数的Javascript性能命中率
- 在操作完成时执行函数
- jquery/js中的自执行函数
- 如何仅在完成对gap.client.youtube的请求.execute后执行函数
- 构造函数函数中的自执行函数的OO上下文/范围
- Javascript未使用=运算符执行函数
- AngularJS:如何按照预定义的顺序执行函数
- 在不使用隔离作用域的情况下执行函数的角度指令
- 如何在页面加载后执行函数是在 AngularJS 中完成的
- 完成页面加载后执行函数
- 如何在完成完全执行函数后触发循环