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不是一个普通的空对象么?或者说跟我们手动赋值的自定义对象有差别?这里的疑问一直没搞明白,希望各路神仙指点~~
em...感觉你原型对象弄混了...
构造函数的实例本身是没有
constructor
的,它的constructor
继承自原型,原型的constructor
指向构造函数,所以dog1.constructor === Dog
。这里不能跳过dog1
先看后边的。看懂的话继续..
原题变为
Dog.prototype.constructor
Dog.prototype
指向的是Dog
构造函数的原型对象所以最后的问题变为:原型对象的
constructor
,那不就是构造函数么,也就是Dog
,没毛病啊..看懂的话再继续..
至于第二个例子,你的原型对象指向一个另一个对象了,
constructor
自然不指向原来的构造函数了,而是指向Object
构造函数。可以看一下我写的文章,里边有原型对象的关系图,一看你就知道问题出在哪了。JS基础—原型对象的那些事(二)