console.log a javascript Object/Class - same result before and after the change of the prototype

纵饮孤独 提交于 2019-12-12 14:06:48

问题


I'm trying to understand how js prototypes and classes work, and I'm using Chrome's console.log to print and have a look at the state of my objects while I add new properties etc.

This is the code I'm using: (fiddle)

function Person(){}

Person.prototype.sayHello = function(){ alert("Hello"); };
Person.prototype.name = "Name";

console.log(Person.prototype) //1st console.log

Person.prototype.surname = "Surname";

console.log(Person.prototype); //2nd console.log

I expect to have two different results printed in the console, because the surname property was added after the first console log. Instead, this is the console output:

As you can see, both the outputs have the surname property defined even if it was added only after the 1st console.log..

Can you explain me why? What am I missing? Doesn't console.log show the current state of the object when called?

Thank you in advance, best regards


回答1:


your next line of code where you set the persons surname, doesnt wait for the console log because console.log is asynchrounous, when you try out this code with a timeout it will be correct,

 function Person() {}

 Person.prototype.sayHello = function () {
     alert("Hello");
 };
 Person.prototype.name = "Name";

 console.log(Person.prototype) //1st console.log
 setTimeout(function(){
  Person.prototype.surname = "Surname";

 console.log(Person.prototype); //2nd console.log
 },1000);

you could save a copy of that object before you log it, then it would work

Synchronous console logging in Chrome

UPDATE: i have an even better solution :
just log a stringifyed version of the object and you´ll be okay

console.log(JSON.stringify(Person.prototype))


来源:https://stackoverflow.com/questions/22146684/console-log-a-javascript-object-class-same-result-before-and-after-the-change

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!