天天看點

bind,call和apply簡單總結

共同點:都是用來改變this環境。 bind和 apply,call不同點: 執行機制不同。 bind綁定是傳回一個新的函數的,這個新函數的内容是原函數的内容,this是bind綁定的this環境。不執行原函數。 如:function fn(a,b,c)={}; var fn2 = fn.bind({ a:1,b:2 }); apply和call是在原函數執行時,動态改變this環境。

apply和call 相同點:第一個參數都是要綁定的this環境變量。 不同點: 參數不同。 apply 最多兩個參數,第二個參數是個數組,裡面存放原函數的參數。 如:function fn(a,b,c)={}; fn.apply( this, [ a,b,c ] ); call 可以有多個參數,除了第一個參數,其他都是原函數的參數。 如:function fn(a,b,c)={}; fn.call( this, a, b, c ); 總結:改變函數的執行環境,相當于函數在新的環境中從新運作或者定義。bind是在新環境中定義,并且傳回一個新函數。apply和call是在新環境中執行,繼承就是利用這個特性來實作的,在其他類中使用現有類的函數構造自己的内部環境。 如: function A ( name ){ this . name = name ; this . fn = function (){ console . log ( this ); } } function B ( str ){ A . call ( this , str ); } var b = new B ( 'xiaoming' ); b . fn ();

call的作用:在B的執行上下文中執行一遍A操作