对象原型(__proto__)和构造函数原型对象(prototype)里面都有一个属性constructor,constructor我们称为构造函数,因为它指向的是构造函数本身。
constructor主要用于记录该对象引用于哪个构造函数,它可以让原型对象重新指向原来的构造函数。
下面这个例子可以说明:
function Student(name, age) {
this.name = name
this.age = age
}
Student.prototype.study = function() {
console.log(this.name + '在学习')
}
var zs = new Student('张三', 18)
console.log(zs.__proto__.constructor)
console.log(Student.prototype.constructor)
console.log(zs.__proto__.constructor === Student.prototype.constructor)

很多情况下,我们需要手动利用constructor这个属性指回原来的构造函数。
Student.prototype = {
study: function() {
console.log('在学习')
},
work: function() {
console.log(在工作)
}
}
当使用对象的形式对prototype重新赋值。那么这时候的constructor
指向的就不是原来的构造函数了,而是
因为prototype被重写了,原本里面的constructor也就不存在了。

因为prototype被重写了,原本里面的constructor也就不存在了。
那么如何让constructor重新指回构造函数呢?在prototype里添加constructor:Student
Student.prototype = {
constructor:Student,
study: function() {
console.log('在学习')
},
work: function() {
console.log(在工作)
}
}
console.log(Student.prototype.constructor)

这时候constructor又重新指回原来的构造函数了。