js中的继承

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>2</title>
</head>
<body>
    <script>
        function SuperType(){

        }
        SuperType.prototype.arr1 = [1,2,3,4,5];
        SuperType.prototype.arr2 = [4,5,6];
        function SubType(){

        }
        SubType.prototype = new SuperType();
        SubType.prototype.arr2 = [7,8,9]

        var i0 = new SuperType();
        alert(i0.arr1);//1,2,3,4,5

        var i1 = new SubType();
        i1.arr1.push(7);
        i1.arr2 = [2,3,4];
        alert(i1.arr1);//1,2,3,4,5,7
        alert(i1.arr2);//2,3,4
        alert(i0.arr1);//1,2,3,4,5,7  此时i0的arr1属性值也对应发生变化

        var i2 = new SuperType();
        alert(i2.arr1);//1,2,3,4,5,7
        alert(i2.arr2);//4,5,6

        var i3 = new SubType();
        alert(i3.arr1);//1,2,3,4,5,7
        alert(i3.arr2);//7,8,9


        alert(i3.constructor);//function  SuperType(){}

        /*
            子类实例对象寻找属性的步骤:1.自身的实例属性;2.子类构造函数原型对象上的属性;3.父类构造函数原型对象上的属性;
            上述步骤也说明了,借用构造函数的方式实现的继承的原理:子类的原型对象是父类的一个实例对象,也就是说子类的原型对象中的[[prototype]]指向的是父类的原型对象。所以说最后的子类实例对象的constructor弹出的是父类构造函数
            注意:如果对父类构造函数中的引用类型属性有修改操作(例如上述实例中数组的添加成员等),则也会影响父类的实例对象对应的该属性值;
        */
    </script>
</body>
</html>

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。