2013-07-11 113 views
0

我试图做一个教训,学习JavaScript对象等等......我有这个问题在循环中,我假设对象字面本身对象重复自己

var darkness = { 
    add: function(a,b) { 
    for(var title in b) { 
     alert(a+ " is the "+ b.title); 
     alert(a+ " holds many of"+b.dream); 
    } 
    } 
}; 


darkness.add('darkness',{ 
    title :'feelings', 
    dream:'dreams' 
}); 

这两次警报?测试http://jsbin.com/ogunor/1/edit

有人可以帮助我更好地学习这些一点

+3

你并不需要循环:http://jsbin.com/ogunor/3/edit – elclanrs

+0

哈哈难怪。感谢elclanrs,所以我们可以多做些什么?像'title:function(){},'如果是的话,我们如何将它赋值为b.title? – EasyBB

回答

2

我会尽量解释。你传递的b对象有两个属性:title和dream。你的for(var title in b)循环将遍历每个对象属性键。意思将运行两次 - 第一次迭代将有title = 'title'和第二次title='dream'。在每次迭代中,您都会提醒两次 - 从而获得4次警报。您可以完全删除该循环,只保留警报以仅警告两次。

var darkness = { 
    add: function(a,b) { 
    for(var title in b) { // runs twice cuz you have 2 properties 
     alert(title); // try alerting title just to see what it hold in each iteration. 
     alert(a+ " is the "+ b.title); 
     alert(a+ " holds many of"+b.dream); 
    } 
    } 
}; 


darkness.add('darkness',{ 
    title :'feelings', // 1st property 
    dream:'dreams' // 2nd property 
}); 
2

你的代码被提醒两次怎么一回事,因为你是通过每个属性(titledream)在b对象循环。

这是不够的:

var darkness = { 
    add: function(a,b) { 
     alert(a+ " is the "+ b.title); 
     alert(a+ " holds man of " +b.dream); 
    } 
}; 

darkness.add('darkness',{ 
    title :'feelings', 
    dream:'dreams' 
});