直接贴代码和结果
function Motor_Vehicle(mytype){
this.type=mytype;
}
function Car(){
this.Color='red';
this.Num=4
}
Car.prototype=new Motor_Vehicle("轿车");
var car1=new Car();
console.log(car1)//结果可以看到_proto_中有owner属性,值为王五
console.log(car1.__proto__.owner)//这里也能打印出来结果
console.log(car1.owner)//这里就是undefined了
        Car.prototype.owner="王五";//王五在这里定义赋值的,按照GO的顺序,应该是前面三行中,都可以看到owner,但是没有值才对,为什么前两条有值,而最后一条为undefined呢?

解决方案 »

  1.   

    错了。
    其实控制台打印对象,只是一个地址引用。当你去展开时展示的是最终的结果。如果你要打印即时的结果应该使用JSON.stringify,比如:function Motor_Vehicle(mytype){
    this.type=mytype;
    }
    function Car(){
    this.Color='red';
    this.Num=4
    }
    Car.prototype=new Motor_Vehicle("轿车");
    var car1=new Car();
    console.log(JSON.stringify(car1.__proto__))//自然就不会有owner属性
    console.log(car1.__proto__)//必须展开才能看到owner属性
    Car.prototype.owner="王五";
    这个问题老有人提。
      

  2.   


           var obj = {
    name: 'test'
    } setTimeout(() => {
    obj.name = 'tttzy1';
    console.log('test1')
    }, 500);
    console.log(obj);定时器执行完之前点开还是原来的值;
    等到定时器执行完在点开输出的对象,值时变化后的;
      

  3.   

    在用console.log()输出数组或对象时,对象(数组)的属性有时是折叠不显示的。
    如果你在console.log()输出之后改变了对象(数组)的属性,当你点击三角展开属性时,会重新读取对象(数组)当前的属性,也就是显示出来的是你点击三角展开时的属性,而不是执行console.log()时的属性。解决方法是用console.log(JSON.stringify(obj));以字符串方式输出