JS Call()與Apply()


ECMAScript規范給所有函數都定義了Call()與apply()兩個方法,call與apply的第一個參數都是需要調用的函數對象,在函數體內這個參數就是this的值,剩余的參數是需要傳遞給函數的值,call與apply的不同就是call傳的值可以是任意的,而apply傳的剩余值必須為數組。

例如:function add(a, b) { return a + b; }

function sub(a, b) { return a - b; }

/*apply用法

* var a1 = sub.apply(add, [4, 2]);

*var a2= add.apply(sub, [4, 2]);  

*/

var a1 = sub.call(add, 4, 2);

var a2= add.call(sub, 4, 2);

輸出:a1=2  a2=6

 

感覺還是有意未盡,更有意思的還在下面

js總是認為他是萬能的,既然高級語言會繼承,我js也不能示弱:JS模仿繼承

  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);  // a輸出的是456

這里就是把啊f1的方法拿給f2來使用,f2便可以使用f1中所有的方法,這不正是高級語言中繼承的概念嘍。當然根據綜上可擴展出多繼承,使用多個call便可以實現多繼承

   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哈哈~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM