这是我在大型项目中遇到的问题的简化,因此我希望它有意义。
我有两个对象:
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;
}
};
然后,我调用两个 init
方法并记录结果:
(function(){
FirstObj.init();
SecondObj.init();
console.log(FirstObj.data);
})()
现在,我假设 - 基于我在 Actionscript 中的基础 - 日志将显示一个 Array
,其中第一项是 0
,其余的都是 1
但 0
似乎没有粘住。
为什么 0
值的分配在这里没有成功,但如果我直接定位 FirstObj.data[ 而不是
。cell = 0
,则工作正常0] = 0
我猜这是一个范围问题,我可以解决它,但我试图正确理解 JS 如何实际处理这些东西,特别是当将代码集中到像这样的对象中时(顺便说一句,是人们普遍认为这是一个好方法吗?)。
感谢您的帮助。
最佳答案
JavaScript 中的数字称为 primitive value types (与字符串、 bool 值 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
这样的东西应该可以工作。
关于JavaScript 对象范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21754781/