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(爹的名字)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。