Javascript在console.log之前更改对象中的键

时间:2015-04-17 12:23:25

标签: javascript object

这个代码的结果中出现了一些我无法理解的东西

var ctrl1 = {
    func1: function(objct){
        objct.options.b = "b";
    }
}

var ctrl2 = {
    myvar : {options:{a:"a"}},
    func2: function(){
        console.log(ctrl2.myvar);
        ctrl1.func1(ctrl2.myvar);
    },
}

ctrl2.func2();

我有结果

Object {a:"a", b:"b"}

虽然通常会显示

Object {a:"a"}

http://jsfiddle.net/akbach/6u0qnrc6/4/

中进行测试

3 个答案:

答案 0 :(得分:0)

console.log可能会显示实时引用(无论如何都是chrome),而不是快照。如果它被折叠" (必须点击它来扩展细节),它将继续更新。

您可以通过运行代码,然后在控制台中再次修改代码并观察上一个输出来看到这一点。

答案 1 :(得分:0)

console.log()方法接收对象的引用。通过单击" +"在控制台中打开对象我们需要更长的时间,而不是需要调用func1方法。尝试替换console.log(ctrl2.myvar);使用console.log(JSON.stringify(ctrl2.myvar));

答案 2 :(得分:0)

您的编码工作正常。它是在控制台中打印之前更新的选项。

尝试以下步骤打开控制台粘贴以下代码。

var ctrl1 = {
    func1: function(objct){
        objct.options.b = "b";
    }
}

var ctrl2 = {
    myvar : {options:{a:"a"}},
    func2: function(){
        console.log(ctrl2.myvar);
        debugger;
        ctrl1.func1(ctrl2.myvar);
    },
}

ctrl2.func2();

一旦代码在调试器停止,您将在控制台中看到所需的结果,即:" a"

现在恢复脚本执行。之后在您的控制台上写ctrl2.myvar,然后您将看到包含a和b的更新选项。