1. 程式人生 > >Function.prototype.bind的實現

Function.prototype.bind的實現

Function.prototype.bind = function() {

     var self = this,

           content = [].shift.call( arguments ),  //需要繫結的this上下文

          args = [].slice.call( arguments ); //剩餘的引數轉成陣列

    return function() {

           return self.apply( content ,[].concat.call( args , [].slice.call( argument )));

           //執行新的函式時候,會把,之前傳入的content當作新函式體內的this

          //而且組合兩次分別傳入的引數,作為新函式的引數

    }

}

 

例子:

var obj = {

    name: 'sven'

}

var func = function() {

    alter(this.name); //輸出:sven

    alert([a,b,c,d]); //輸出: [1,2,3,4]

}(obj,1,2);

func(3,4);