javascript - console.log javascript 对象/类 - 原型(prototype)更​​改前后的结果相同

标签 javascript prototype console.log

我正在尝试了解 js 原型(prototype) 是如何工作的,我正在使用 Chrome 的 console.log 来打印并拥有在我添加新属性等时查看对象的状态。

这是我使用的代码:( 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

我希望在控制台中打印出两个不同的结果,因为 surname 属性是在第一个控制台日志之后 添加的。相反,这是控制台输出:

enter image description here

如您所见,两个输出都定义了 surname 属性,即使它是仅在第一个 console.log 之后添加的。

你能解释一下为什么吗?我错过了什么?调用时,console.log 不会显示对象的当前状态吗?

提前致谢,致以最诚挚的问候

最佳答案

你设置人员姓氏的下一行代码不会等待控制台日志,因为 console.log 是异步的,当你尝试这段代码超时时它会是正确的,

 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);

您可以在记录之前保存该对象的副本,然后它就可以工作了

Synchronous console logging in Chrome

更新: 我有一个更好的解决方案:
只需记录对象的字符串化版本,就可以了

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

关于javascript - console.log javascript 对象/类 - 原型(prototype)更​​改前后的结果相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22146684/

相关文章:

iphone - 如何使用 Xcode 4 创建简单的 iOS 应用程序原型(prototype)?

javascript - 如何修复 Prototype 与 Highchart 的冲突?

javascript - 新的 JavaScript 原型(prototype)更改了构造函数

javascript - 如何让 Firefox 控制台显示超过 200 个日志条目?

javascript - console.log 无法获取端口变量,我已经提供了屏幕截图

javascript - 从浏览器中添加 console.log 或等效内容

javascript - 如何在文本框中设置值 - asp.net 使用 jquery?

javascript - 如何使用 Meteor 处理文件上传?

javascript - 为什么 JavaScript 的 `function.call` 必须显式调用?

javascript - 如何使用谷歌图表更改条形和线条上的注释位置