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基础—原型对象的那些事(二)
添加回答
举报
0/150
提交
取消