javascript - js如何实现对象参数格式的继承?
怪我咯
怪我咯 2017-04-10 14:21:37
[JavaScript讨论组]

想用js的继承优化一段代码,但是发现,参数使用对象格式的,就不行。

我可不想在构造函数中按顺序来写参数。

var P=function(opts){
    this.name=opts.name;
    this.age=opts.age;
};
P.prototype={
    constructor:P,
    getName:function(){
        return this.name;
    },
    getAge:function(){
        return this.age;
    }
};
var S=function(opts){
    P.call(this,opts);
    this.address=opts.address;
};
S.prototype=new P();
S.prototype.constructor=S;
S.prototype.getAddress=function(){
    return this.address;
}

这个怎么破?

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(2)
天蓬老师

因为你在 S 的构造函数内已经 callP,于是也就已经有了 this.namethis.age,因此已经没有必要 new P() 赋给 S.prototype 了,所以把这一句去掉即可:

S.prototype = new P();
ringa_lee

尝试面向对象编程时也遇到题主的问题,翻看《JavaScript 高级程序设计》 第六章的组合继承,和题主是一样的,书中给出的参数是变量,如果想要以对象作为参数,在子类的原型 new父类的构造函数时,就报错了。问题就出在这里,经过尝试,可以将 父类的原型直接赋值给子类的原型,

将S.prototype=new P(); 换成 S.prototype = P.prototype 

即可。但有一个严重的问题,就是引用类型的值在所有实例中共享。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号