阅读 40

js-构造函数问题



 function Fu(uname ,age ){ 
    //1.实例成员
    this.name =name ;
    this.age =age;
    this.sing=function(){
        console.log("吃西瓜")
    }
 }
 //2.实例化不同对象
//new时创建对象,并且返回实例
 let lj = new Fu('刘金',18);   
let ll =new Fu('李路',19);
 //调用不同实例对象公共相同方法
 lj.sing()
 ll.sing()
 //构造函数缺点
// (1)存在浪费内存的问题
 //(2)如图 

复制代码

Snipaste_2021-06-11_21-43-00.png

`//解决构造函浪费内存问题

  • 知识点1:javaScript规定,每个构造函数都有一个prototype属性指向原型对象,把方法定义到原型上即可
  • 解决构造函数浪费内存问题:构造函数名.prototype.方法名=function(){}
  • 知识点2:每个实例化对象(比如lj)系统自己添加一个__proto__指向我们构造函数原型对象(比如Fu.prototype)
  • console.log(lj.proto === Fu.prototype);为true
  • 注意:实例化对象(__proto__叫对象原型) 构造函数原型对象(prototype 叫原型对象)
  • 如图

.png

  • 注意:__proto__查找机制,首先找实例对象是否有sing这个方法,如果没有再找构造函数原型对象中sing

  • 注意:__proto__不能赋值操作只是提供指构造函数原型对象

  • 注意:对象原型(proto)指向构造函数里属性(prototype) 原型对象里面有个constructor属性指向构造函数本身

  • 注意:对象原型(_proto)里有个属性constructor 与原型对象(prototype) 里有个属性constructor ,都是指向构造函数本身,除非覆盖consteuctor列如:Fu.prototype={参数},想再次指会构造函数本身Fu.prototype={constructor:Fu}即可

  • 原型链图:如下

Snipaste_2021-06-11_23-34-22.png

文章分类
前端
文章标签