乐趣区

关于javascript:JavaScript笔记面向对象编程3对象原型与原型对象

   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(爹的名字)

退出移动版