對象原型(__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又重新指回原來的構造函數了。