Javascript对象范围
这是我在一个更大的项目中遇到的问题的简化,所以我希望这是有意义的 我有两个目标:Javascript对象范围,javascript,Javascript,这是我在一个更大的项目中遇到的问题的简化,所以我希望这是有意义的 我有两个目标: FirstObj = { data : [], init : function() { for(var a = 0; a < 20; a++) { this.data[a] = 1; } } }; SecondObj = { init : function() { va
FirstObj = {
data : [],
init : function()
{
for(var a = 0; a < 20; a++)
{
this.data[a] = 1;
}
}
};
SecondObj = {
init : function()
{
var cell = FirstObj.data[0];
cell = 0;
}
};
现在,基于我在Actionscript中的基础,我假设日志将显示一个数组,其中第一项是0
,其余的都是1
,但0
似乎不固定
为什么0
值的赋值在这里不成功,但如果不是cell=0
I直接指向FirstObj.data[0]=0
,那么赋值工作正常
我猜这是一个范围问题,我可以解决它,但我正试图正确理解JS实际上是如何处理这些东西的,特别是当将代码集中到像这样的对象中时(顺便说一句,这是人们普遍认为的好方法吗?)
感谢您的帮助。数组索引返回Javascript中的值,而不是引用。这意味着一旦数据[0]
分配给单元格
,进一步修改单元格
将不会影响数据[0]
分配数组本身将导致您要查找的行为:
SecondObj = {
init : function()
{
var cells = FirstObj.data;
cells[0] = 0; // Will also affect data[0].
}
};
JavaScript中的数字被称为(与字符串、布尔值null
和undefined
一起)
这意味着,当你
var cell = FirstObj.data[0];
您正在FirstObj.data[0]
中传递值,而不是对它的引用
你所做的是:
var x = 5;
var y = x; // y is now 5
y = 4; // y is 4, x is still 5.
当然,像FirstObj.data[0]=0这样的东西应该可以工作
var x = 5;
var y = x; // y is now 5
y = 4; // y is 4, x is still 5.