js中call和apply

  ECMAScript规范给所有函数都定义了Call()与apply()两个方法,call与apply的第一个参数都是需要调用的函数对象,在函数体内这个参数就是this的值,剩余的参数是需要传递给函数的值,call与apply的不同就是call传的值可以是任意的,而apply传的剩余值必须为数组。

a.call(b);  //刚一看还以为是a要调用b,其实是a应用于b下
        function fun1() {

            this.a = 123;

            this.add = function () { return  this.a }

        }

        function fun2() {

            this.a = 456;

        }

        var f1=new fun1()

        var f2=new fun2()

        var a = f1.add.call(f2);  // 将f1中的add放到f2中执行了,而f2中的a=456,所以a输出的是456                   

看到没,将一个东西放到一个东西内,是不是想到了一个东西,java中的继承。。。没错call和apply就是来实现js的继承的

可以用来实现多继承

    function fun1() {
            this.add = function () { return this.a }
        }

        function fun2() {
       this.sub = function () { return this.a-this.b }
        }

        function fun3() {

            this.a = 10;

            this.b = 2;

            fun1.call(this);

            fun2.call(this);

        }

        var f3 = new fun3()

        alert(f3.add());

        alert(f3.sub());如此,想要继承谁就可以继承谁,我js天下无敌 O(∩_∩)O哈哈~

没错,你确实很流弊,你天下无敌

  

posted @ 2015-10-14 15:56  暗夜心慌方  阅读(106)  评论(0)    收藏  举报