console.log(Star.prototype.constructor);   console.log(ldh.__proto__.constructor);   //打印的是一样的 都是Star这个函数自身 对象原型或者原型对象.constructor都指向构造函数

Prototype自身就是一个对象 一个自带的内置的对象 这就是为什么它被叫做原型对象

 function Star(uname, age) {         this.uname = uname;         this.age = age;     }     Star.prototype = {         //这是在创建对象 不懂的话看文档最最开始 3种创建对象的办法之一 这是字面量办法         //当前记住看到前面跟花括号 就是创建对象!         //Star.protype自身就是一个对象别忘了 因为prototype本身就是一个对象属性 是自带的 内置的         //那么这一段代码其实进行了一个赋值操作 也就是说利用了前面的sing和movie将这个prototype对象给笼罩掉了         // 笼罩完了当前就没有star.constructor 这个属性了         sing: function () {             console.log('我能唱歌');         },         movie: function () {             console.log('我能演电影');         }     }     console.log(Star.prototype);//输入后果为sing movie两个function 理由很简略 赋值笼罩掉了呗     function Star(uname, age) {         this.uname = uname;         this.age = age;     }     Star.prototype = {         //这是在创建对象 不懂的话看文档最最开始 3种创建对象的办法之一 这是字面量办法         //当前记住看到前面跟花括号 就是创建对象!         //Star.protype自身就是一个对象别忘了 因为prototype本身就是一个对象属性 是自带的 内置的         //概括来说就是 如果咱们批改了原来的原型对象,给原型对象等于了一个花括号 也就是说通过赋值笼罩了这个原型对象 咱们须要手动指回原来的构造函数 办法就是在赋值笼罩的时候写constructor:Star(不肯定是Star 冒号前面跟构造函数名称)         //那么这一段代码其实进行了一个赋值操作 也就是说利用了前面的sing和movie将这个prototype对象给笼罩掉了         // 笼罩完了当前就没有star.constructor 这个属性了         constructor: Star,         //增加下面这一行的代码之后         //就相当于手动指回原来的构造函数(那个uname age)         //console.log(Star.protype.constructor) 返回Star这个原来的构造函数

总结一下,在咱们的原型prototype外面 有一个属性叫constructor ,这个constructor(找爹仪器 找爹探头)能够通知咱们你这个原型对象(儿子)是通过哪个构造函数(爹)创立进去的。当原型对象(儿子)被你做了对象的赋值操作 /笼罩之后,那原来的constructor属性就被笼罩掉了 (就没了)要让原型对象(儿子)从新找到构造函数(爹) 须要咱们手动指回,办法是在赋值笼罩的花括号外面写constructor:Star(爹的名字)