对象原型(__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也就不存在了。 那么如何让constructor重新指回构造函数呢?在prototype里添加constructor:Student Student.prototype = { constructor:Student, study: function() { console.log('在学习') }, work: function() { console.log(在工作) } } console.log(Student.prototype.constructor)
这时候constructor又重新指回原来的构造函数了。