为了账号安全,请及时绑定邮箱和手机立即绑定

javascript中,constructor.prototype.constructor 为什么会

javascript中,constructor.prototype.constructor 为什么会

慕田峪9158850 2018-12-13 14:14:07
1、一个通过new创造的instance,他的constructor.prototype.constructor为什不是Object()2、实例代码如下:function Dog(name){    this.name = name;}var dog1 = new Dog('dg1')dog1.constructor.prototype.constructor // Dog()疑问:如上代码,我的理解是constructor.prototype 是一个普通的对象,所以这个普通的对象的constructor应该是Object(),而不是Dog()4、再看如下代码:function Dog(name){    this.name = name;}Dog.prototype = {    color:'black',    age:3}var dog2 = new Dog('dg2')dog2.constructor.prototype.constructor // Object()疑问:这里返回的是符合预期的Object(),难道一个构造函数默认的prototype不是一个普通的空对象么?或者说跟我们手动赋值的自定义对象有差别?这里的疑问一直没搞明白,希望各路神仙指点~~
查看完整描述

1 回答

?
胡说叔叔

TA贡献1804条经验 获得超8个赞

em...感觉你原型对象弄混了...

构造函数的实例本身是没有constructor的,它的constructor继承自原型,原型的constructor指向构造函数,所以dog1.constructor === Dog。这里不能跳过dog1先看后边的。

看懂的话继续..
原题变为Dog.prototype.constructor
Dog.prototype指向的是Dog构造函数的原型对象
所以最后的问题变为:原型对象的constructor,那不就是构造函数么,也就是Dog,没毛病啊..

看懂的话再继续..
至于第二个例子,你的原型对象指向一个另一个对象了,constructor自然不指向原来的构造函数了,而是指向Object构造函数。

可以看一下我写的文章,里边有原型对象的关系图,一看你就知道问题出在哪了。JS基础—原型对象的那些事(二)


查看完整回答
反对 回复 2019-01-26
  • 1 回答
  • 0 关注
  • 366 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信