JS封装继承函数


1 function extend(child,parent){
 2     var F=function(){}
 3     F.prototype=parent.prototype;
 4     child.prototype=new F();
 5     child.prototype=child;
 6     child.uber=parent.prototype; //uber指向父对象的原型。方便子对象调用父对象原型中的重写的方法。
 7 }
 8 function Shape(){}
 9 Shape.prototype.name="Shape";
10 Shape.prototype.color="blue";
11 
12 function circle(radius){
13     this.radius=radius;
14 }
15 
16 circle.prototype.name="circle";
17 circle.prototype.getS=function(){
18     return this.radius*this.radius*3.14;
19 }
20 extend(circle,Shape);
21 
22 var cir=new circle(2);
23 alert(cir.name);   //"circle"
24 alert(cir.color);    //"blue"
25 alert(cir.uber.name);    //"Shape"
26 alert(cir.getS()) //"12.56"


extend函数的第一个参数是子构造器,第二个参数是父构造器;

为什么子构造器的原型对象不直接指向父构造器的原型对象,是因为若child.prototype=parent.prototype,则会出现父子的原型对象绑定在一起,即父子的原型对象的引用相等,相当于指向同一个地址,改变子对象的原型,父对象的原型也会随之改变, 若遍历父对象的原型和子对象的原型,发现两个完全相同个。

长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn