javascript - 修改实例属性对修改前已输出到控制台的内容也有影响?

查看:99
本文介绍了javascript - 修改实例属性对修改前已输出到控制台的内容也有影响?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

不是原型动态性的问题,是控制台的问题
先贴上我的代码

function Father(){
    this.colors = ["red", "green", "blue"],
    this.sayColor = function(){
    console.log(this.colors);
    };
}
function Child(){}
Child.prototype = new Father();

var child1 = new Child();
child1.sayColor(); // ["red", "green", "blue"] 原始值

child1.colors.push("black"); // 属性修改
var child2 = new Child();
child2.sayColor(); // ["red", "green", "blue", "black"]
child1.sayColor(); // ["red", "green", "blue", "black"]

注释为正常运行的结果,但若在浏览器里(Firefox和Chrome)打开,控制台会返回3个相同的数组:

以及

点击刷新页面后,返回正常的结果;
或将console.log改为alert,打开页面即返回正常的结果;
因为IE每次都需要手动载入脚本,相当于刷新了一次页面,所以结果正常;
所以我觉得,是不是控制台输出结果的方式和我想的不一样?求解答。

解决方案

我也遇到过这样的问题,以下是我提出的问题:
https://segmentfault.com/q/10...

如果你不想看,总的来说console.log 是有惰性求值的问题!

先说结论:console.log 是不靠谱的由于它并非标准里确定的 API,所以浏览器的实现是没有标准可言的。有时候会出现同步的 console.log 与异步的 console.log 的困惑,也有立刻求值的 console.log 和惰性求值的 console.log 的差异。你遇到的是后者。

补充参考:http://stackoverflow.com/ques...

这篇关于javascript - 修改实例属性对修改前已输出到控制台的内容也有影响?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆