js对象继承的问题

js继承方法有多种;

1.利用call()和apply()的方法。

call()里面接受多个参数;apply()只能接受两个参数。

call()第一个参数是本身,后面都是他的属性和方法。

apply()第一个参数是本身,第二个只能是数组。

代码如下:

    <script type="text/javascript">
            function Person(name,sex){
                this.name=name;
                this.sex=sex;
                this.info=function(){
                    console.log(this.name);
                }
            }
            function Teacher(name,sex,course){
                Person.call(this,name,sex)//Person.apply(this,[name,sex])
                this.course=course;
                this.infoCourse=function(){
                    console.log(this.course)
                }
            }
            var t=new Teacher("张三","男","英语");
            console.log(t.name)
  
</script>

2.利用prototype独立出来给其添加子级。

此方法可以添加多个属性和方法。

主要是子级继承父级独立出来的东西。

其父级没独立出来的不能传入。

代码如下:

    <script type="text/javascript">
            function A(name){
                this.name=name;
            }
            //给A添加一个方法
            A.prototype.say=function(){
                console.log(22)
            }
            A.prototype.index=11;
            function B(name,age){this.age=age;
            }
            //子级继承父级的独立出来的东西
            B.prototype=new A();
            var b=new B(20,11)
            b.say();
            console.log(b.name)
            console.log(b.index)
        </script>

3.利用复制的方法。

思想是把父级里面的属性和方法便利一遍给给子级。

方法如下:

        <script>
            function A(name){
                this.name=name;
                this.say=function(){
                    console.log("hello");
                };
            };
            function B(name){
                var a=new A(name);
                //便利数组里的所有的元素
                for(var i in a){
                    //获取里面的所有的属性和方法。
                    B.prototype[i]=a[i];
                };
            };
            var b=new B("name");
            console.log(b.name);
        </script>

 

posted on 2017-03-03 15:41  乘封  阅读(301)  评论(0编辑  收藏  举报

导航