设置新原型后的一个问题,很是困惑

yaotusa 2017-07-20 04:37:00
代码如下:

function Mammal() {
this.isMammal = 'yes';
}

function MammalSpecies(sMammalSpecies) {
this.species = sMammalSpecies;
}

MammalSpecies.prototype = new Mammal();
console.log(MammalSpecies.prototype) // ①
console.log(MammalSpecies.prototype.constructor) // ②
MammalSpecies.prototype.constructor = MammalSpecies;

问题:

在Chrome 59的console端查看输出:
①的输出是
Mammal {isMammal: "yes"}
constructor:function MammalSpecies(sMammalSpecies)
isMammal:"yes"
__proto__:Object
似乎constructor已经仍旧保持不变

但是,②的输出却已经变了,如下面
function Mammal() {
this.isMammal = 'yes';
}

是chrome的bug,导致①的输出有问题?
又或者是有其它的解释呢

百思不得其解,望高手回复
...全文
129 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
yaotusa 2017-07-22
  • 打赏
  • 举报
回复
嗯,当我在console端点击树形右箭头图标展开 MammalSpecies.prototype 的输出时, 已经是执行完语句 MammalSpecies.prototype.constructor = MammalSpecies; 后的结果 如果我在执行语句MammalSpecies.prototype.constructor = MammalSpecies;前打个断点, 这个时候的输出就跟预想的一样了 真是非常感谢jslang的耐心解释
天际的海浪 2017-07-20
  • 打赏
  • 举报
回复
显示出来的这个object中的属性和属性值有可能是不对的 为什么有可能是不对的、你理解了没有? 你要理解console.log()输出时 和 你展开对象时的时间差。 你看到的是你展开对象时的属性和属性值
yaotusa 2017-07-20
  • 打赏
  • 举报
回复
jslang,谢谢你的回复; 好像还不是很明白 MammalSpecies.prototype是一个object,console.log()输出这个对象的时候, 显示出来的这个object中的属性和属性值有可能是不对的,所以①显示的constructor值不对。 如果要在console看一个对象中的属性值,一定要像②那样子指定属性值输出,才是正确的 是这样理解吗
天际的海浪 2017-07-20
  • 打赏
  • 举报
回复
在Chrome中用console.log()输出一个对象,对象的属性初始是折叠起来的。 在输出对象时并不读取这些属性,只有在展开对象属性时才读取属性和属性值。 你看到的属性和属性值是展开对象时的,而不是console.log()输出时候的。

87,994

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧