javascript中的继承二 call()和apply()

前面的继承一中简单的描述了javascript的原型链继承属性拷贝

这里简单的用apply()和call()来实现 javascript中的继承

Object.apply(obj,agrs);

apply方法能劫持另外一个对象的方法,继承另外一个对象的属性
obj:这个对象将代替Function类里this对象
args:这个是数组,它将作为参数传给Function(args-->arguments)

这两个方法基本上是一个意思,区别在于 call 的第二个参数可以是任意类型,而apply的第二个参数必须是数组,也可以是arguments

<script type="text/javascript">
        //人类
        function Person(name,age){
            this.name = name;
            this.age = age;

            this.say = function(){
                console.log("Everyone can say !");
            }

            this.eat = function(){
                console.log("you can eat !");
            }
        }
        //学生类
        function Student(name,age){
            Person.apply(this,arguments);

            this.learn = function(){
                console.log("Interesting ?");
            }
        }

        var s1 = new Student("lee",14);

        console.log(s1.name);
        s1.say();
        s1.eat();
        s1.learn();
        console.log("===============分割线===============");
        //小学生类
        function S_Student(name,age,sexy){
            Student.apply(this,arguments);
            this.sexy = sexy == 1 ? "男孩" : "女孩";

        }

        var s_s1 = new S_Student("Tom",10,2);
        console.log(s_s1.name);
        s_s1.eat();
        s_s1.say();
        s_s1.learn();
        console.log(s_s1.sexy);
    </script>

运行结果:

猜你喜欢

转载自my.oschina.net/u/3229305/blog/968529
今日推荐