JavaScript 对象范围

标签 javascript

这是我在大型项目中遇到的问题的简化,因此我希望它有意义。

我有两个对象:

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 ,其余的都是 10 似乎没有粘住。

为什么 0 值的分配在这里没有成功,但如果我直接定位 FirstObj.data[ 而不是 cell = 0 ,则工作正常0] = 0

我猜这是一个范围问题,我可以解决它,但我试图正确理解 JS 如何实际处理这些东西,特别是当将代码集中到像这样的对象中时(顺便说一句,是人们普遍认为这是一个好方法吗?)。

感谢您的帮助。

最佳答案

JavaScript 中的数字称为 primitive value types (与字符串、 bool 值 nullundefined 一起)。

这意味着,当你这样做

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/

相关文章:

javascript - 如何使用分隔字符串来定位和修改任意深度的对象键?

javascript - 图片库/缩放幻灯片

javascript - jQuery 插件开发 : null or empty function as default for optional callbacks?

javascript - jQuery - 获取每个元素的标签文本并输出它

javascript - 如何使用 javascript 在 DIV 框内写入

javascript - 根据复选框状态过滤 Leaflet Geojson 对象

php - 如何让 PHP 函数在 javascript 结束后运行?

java - 我怎样才能把这个javascript函数转换成java

javascript - 使用 Javascript 动态创建 HTML 元素?

javascript - 为什么这个从字符串中删除空 <p></p> 标签的正则表达式会失败?