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)如图
复制代码
`//解决构造函浪费内存问题
- 知识点1:javaScript规定,每个构造函数都有一个prototype属性指向原型对象,把方法定义到原型上即可
- 解决构造函数浪费内存问题:构造函数名.prototype.方法名=function(){}
- 知识点2:每个实例化对象(比如lj)系统自己添加一个__proto__指向我们构造函数原型对象(比如Fu.prototype)
- console.log(lj.proto === Fu.prototype);为true
- 注意:实例化对象(__proto__叫对象原型) 构造函数原型对象(prototype 叫原型对象)
- 如图
- 注意:__proto__查找机制,首先找实例对象是否有sing这个方法,如果没有再找构造函数原型对象中sing
- 注意:__proto__不能赋值操作只是提供指构造函数原型对象
- 注意:对象原型(proto)指向构造函数里属性(prototype) 原型对象里面有个constructor属性指向构造函数本身
- 注意:对象原型(_proto)里有个属性constructor 与原型对象(prototype) 里有个属性constructor ,都是指向构造函数本身,除非覆盖consteuctor列如:Fu.prototype={参数},想再次指会构造函数本身Fu.prototype={constructor:Fu}即可
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END