【JavaScript】类继承(对象冒充)和原型继承__深入理解原型和原型链

JavaScript里的继承方式在很多书上分了很多类型和实现方式,大体上就是两种:类继承(对象冒充)和原型继承。

类继承(对象冒充):在函数内部定义自身的属性的方法,子类继承时,用call或apply实现对象冒充,把类型定义的东西都复制过来,这样的继承子类与父类并没有多少关联,不互相影响,有利于保护自身的一些私有属性。

原型继承:每个函数都有自己的原型(prototype)属性,这个属性是在生成实例对象时自动创建的。它本身又是一个对象,拥有能够在实例间共享的属性和方法。而实例本身的属性和方法,则包含在构造函数中。换句话说,构造函数内部的属性和方法,在经过实例化后都成为了本地的属性和方法,而原型(prototype)中的属性和方法在实例中只是一种引用,因此能够被多个实例共享。  

两者各有利弊,实际应用中多是两者混合应用。

以下就通过混合两者的示例去理解:

    function A(x) {
        this.x = x;
    }
    A.prototype.a = "a";
    function B(x, y) {
        this.y = y;
        A.call(this,x);//类继承
    }
    B.prototype.b1 = function() {
        alert("b1");
    }
    B.prototype = new A();//原型继承
    B.prototype.b2 = function() {
        alert("b2");
    }
    B.prototype.constructor = B;
    var obj = new B(1, 3);

 

posted @ 2015-05-21 16:34  有来技术  阅读(467)  评论(0编辑  收藏  举报