我正在尝试了解 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
属性是在第一个控制台日志之后 添加的。相反,这是控制台输出:
如您所见,两个输出都定义了 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/