javascript 继承
博客专区 > sl_yang 的博客 > 博客详情
javascript 继承
sl_yang 发表于2年前
javascript 继承
  • 发表于 2年前
  • 阅读 15
  • 收藏 1
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

继承

原型链继承
    var Base = function()
    {
        this.level = 1;
        this.name = "base";
        this.toString = function(){
            return "base";
        };
    };
    Base.CONSTANT = "constant";

    var Sub = function()
    {
    };
    Sub.prototype = new Base();
    Sub.prototype.name = "sub";

优点:从instanceof关键字来看,实例既是父类的实例,又是子类的实例,看起来似乎是最纯粹的继承。

缺点:子类区别于父类的属性和方法,必须在Sub.prototype = new Base();这样的语句之后分别执行,无法被包装到Sub这个构造器里面去。 例如:Sub.prototype.name = “sub”;无法实现多重继承。

构造继承
    var Base = function()
    {
        this.level = 1;
        this.name = "base";
        this.toString = function(){
            return "base";
        };
    };
    Base.CONSTANT = "constant";

    var Sub = function()
    {
        Base.call(this);
        this.name = "sub";
    };

优点:可以实现多重继承,可以把子类特有的属性设置放在构造器内部。

缺点:使用instanceof发现,对象不是父类的实例。

实例继承
    var Base = function()
    {
        this.level = 1;
        this.name = "base";
        this.toString = function(){
            return "base";
        };
    };
    Base.CONSTANT = "constant";

    var Sub = function()
    {
        var instance = new Base();
        instance.name = "sub";
        return instance;
    };

优点:是父类的对象,并且使用new构造对象和不使用new构造对象,都可以获得相同的效果。

缺点:生成的对象实质仅仅是父类的实例,并非子类的对象;不支持多继承。

拷贝继承
    var Base = function()
    {
        this.level = 1;
        this.name = "base";
        this.toString = function(){
            return "base";
        };
    };
    Base.CONSTANT = "constant";

    var Sub = function()
    {
        var base = new Base();
        for(var i in base)
            Sub.prototype[i] = base[i];
        Sub.prototype["name"] = "sub";
    };

优点:支持多继承。

缺点:效率较低;无法获取父类不可枚举的方法。

共有 人打赏支持
粉丝 3
博文 33
码字总数 8547
×
sl_yang
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: