js constructor问题!

function Oa(){  
    this.gender = '男';  //注意这里
}
Oa.prototype={


    fn1:function(){},
    fun2:function(){}
}


function Ob(name,age){
   this.name=name;
   this.age=age;
}


var cc = function(){};
cc.prototype = Oa.prototype
var dd = new cc();
Ob.prototype=dd;

console.log(Oa.prototype);//
console.log(Ob.prototype);
  1. 打印:

  2. -----------------------------------------------
  3. 在Oa的prototype上加上重写constructor属性,Oa.prototype就变成了自己

  4. Ob.prototype也发生了变化
function Oa(){  

    this.gender = '男';  //注意这里
}

Oa.prototype={

constructor:Oa,//加上的代码

    fn1:function(){},

    fun2:function(){}
}


function Ob(name,age){

   this.name=name;

   this.age=age;
}


var cc = function(){};

cc.prototype = Oa.prototype

var dd = new cc();

Ob.prototype=dd;

--------------------<1>

console.log(Oa.prototype);

console.log(Ob.prototype);

打印:



Oa.prototype重写了constructor属性之后,它的原型constructor指向了自己的构造函数,而不是一开始object,Ob的原型指向了Oa而不是

一开始的object,

所以如果创建子类可以在--<1>处加上Ob.prototype.constructor =Ob;

这是js创建子类的关键,如果不这样做,原型对象仅仅是一个普通的对象,它只继承自Object.prototype,

这意味着你的类和所有的子类一样是Object的子类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值