原型替换
当给原型对象添加的成员比较多时,用原型替换优化
把原型替换成一个新的对象,在新的对象中添加成员
per.prototype = {//…}
问题:原型替换会造成constructor属性丢失
解决:给新的原型对象手动添加constructor属性即可
function per(){
}
// 实例对象需要的成员, 可以往原型对象中添加
//但是如下添加方式,写法比较麻烦,per.prototype写法在重复
// per.prototype.say =function(){
// console.log("你好")
// }
per.prototype ={
//需要给新对象原型对象添加constructor属性,指向当前的构造函数
constructor:per,
say:function(){
console.log("你好")
}
}
var p1 =new per();
//p1 的原型链:
//p1 ==> per.prototype(本质上替换后的对象{})==>Object.prototype==>null
console.log(p1.constructor);//Object
//p1沿着原型链最终查找到Object的原型对象上才有constructor属性==>Object
//原型替换对象身上缺少constructor 原型替换之后找不到constructor 最后找到了Object (是不对的)
//解决办法:在新的对象当中手动添加constructor:per,
//p1.say();